电脑教程中文网
首页  动态网站建设学习 程序  笑话  论坛 娱乐  交友 ADSL  峄城  成功者
中文名:电脑教程中文网,收集了大量的电脑教程! 编程技术文档 游戏开发 笑话站暂时关闭 设为首页
网页设计 HTML | Dreamweaver | CSS | Firework | FrontPage WEB开发 ASP | JSP | PHP | .NET | CGI | JS | VBS | XML | IIS6 | Apache | PWS
程序设计 Java | C++ |VC++ | C# | Delphi | VB | C语言 | 汇编 | Pascal | Perl 数据库 MSSQL | MySQL | Access | VF | Oracle | DB2 | SYBASE |
办公软件 Word | Excel | WPS | PowerPoint 动画平面 Photoshop | ACDSee | 3Dmax | Flash | Coreldraw |
操作系统 Windows 2000 | Windows XP | Windows 2003 | SCO Unix | Windows Vista | unix、Linux | 综合| 服务器 | 系统安全| 黑客技术
其  他 UltraDev | DOS | UML | PWS | Powerbuilder | 开发心得 | 设计理念 | 病毒库 | 其他 | LightTPD (分类排序给您带来不便请谅解)
推  荐: Java文档500篇》《ASP.NET与相关数据库技术高级指南》《TC图形函数详解》《C函数速查手册》《C语言编程宝典之一》《MFC深入浅出》《黑客零起点》《VC++ 编程指南》《JScript 用户指南》 《CSS教程宝典》《Microsoft Jet SQL 参考》《delphi技巧集合》《MySQL 4.1.0 中文参考手册》《MySQL中文手册
【导航】 您现在的位置 : 首页 - .NET教程 - 《.NET技术文档0802期》- DataGrid中ComboBox列样式控制

DataGrid中ComboBox列样式控制

日期:2008-2-28 21:44:17 作者:tigerleq 人气:     来源:网络




using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.Data;

namespace Common
...{
public class DataGridComboBoxColumnStyle: DataGridColumnStyle
...{
private int xMargin = 2;
private int yMargin =1;
private ComboBox Combo;
private string _DisplayMember;
private string _ValueMember;
private string OldVal = String.Empty;
private bool InEdit = false;
public DataGridComboBoxColumnStyle(DataTable DataSource, int DisplayMember,int ValueMember)
...{
Combo = new ComboBox();
_DisplayMember = DataSource.Columns[DisplayMember].ToString();
_ValueMember = DataSource.Columns[ValueMember].ToString();
Combo.SelectedIndexChanged += new System.EventHandler(this.Combo_SelectedIndexChanged);

Combo.Visible = false;
Combo.DataSource = DataSource;
Combo.DisplayMember = _DisplayMember;
Combo.ValueMember = _ValueMember;

}


public DataGridComboBoxColumnStyle(DataTable DataSource, string DisplayMember,string ValueMember)
...{

Combo = new ComboBox();
Combo.SelectedIndexChanged += new System.EventHandler(this.Combo_SelectedIndexChanged);
Combo.Visible = false;
Combo.DataSource = DataSource;
Combo.DisplayMember = DisplayMember;
Combo.ValueMember = ValueMember;

}



protected override void Abort(int RowNum)
...{
RollBack();
HideComboBox();
EndEdit();
}


protected override bool Commit(CurrencyManager DataSource, int RowNum)
...{

HideComboBox();
if(!InEdit)
return true;

try
...{
Object Value = Combo.SelectedValue;
Object Text = Combo.SelectedText;
if(Text.ToString()!=String.Empty)
...{
if(Value!=null)
...{
if(NullText.Equals(Value))
...{
Value = Convert.DBNull;
}

SetColumnValueAtRow(DataSource, RowNum, Value);

}

else
return true;
}

}

catch(Exception e)
...{
RollBack();
return false;
}


EndEdit();

return true;
}

CurrencyManager cm;
int rowNum;
private void Combo_SelectedIndexChanged(object sender, System.EventArgs e)
...{
try
...{
if(this.InEdit)
...{
if(Combo!=null)
...{
Object Value = Combo.SelectedValue;
if(Value!=null)
...{
if(NullText.Equals(Value))
...{
Value = Convert.DBNull;
}

SetColumnValueAtRow(cm, rowNum, Value);

}

}

}

}

catch( System.Exception ex)
...{
throw ex;
}


}


protected override void ConcedeFocus()
...{
Combo.Visible = false;
}

protected override void Edit(CurrencyManager Source,int Rownum,Rectangle Bounds,bool ReadOnly,string InstantText, bool CellIsVisible)
...{

cm=Source;
rowNum=Rownum;
try
...{
Combo.Text = String.Empty;
Rectangle OriginalBounds = Bounds;

OldVal = Combo.Text;

if(CellIsVisible)
...{
Bounds.Offset(xMargin, yMargin);
Bounds.Width -= xMargin * 2;
Bounds.Height -= yMargin;
Combo.Bounds = Bounds;
Combo.Visible = true;
}

else
...{
Combo.Bounds = OriginalBounds;
Combo.Visible = false;
}

Combo.Text =GetText(GetColumnValueAtRow(Source, Rownum));
Combo.RightToLeft = this.DataGridTableStyle.DataGrid.RightToLeft;
Combo.Focus();

if( Combo.Visible)
DataGridTableStyle.DataGrid.Invalidate(OriginalBounds);

InEdit = true;
}

catch(Exception ex)
...{
string m=ex.Message;
}

}


protected override int GetMinimumHeight()
...{
return Combo.PreferredHeight + yMargin;
}


protected override int GetPreferredHeight(Graphics g, Object Value)
...{
int NewLineIndex = 0;
int NewLines = 0;
string ValueString = this.GetText(Value);

while(NewLineIndex != -1)
...{
NewLineIndex = ValueString.IndexOf("r ", NewLineIndex + 1);
NewLines += 1;
}


return FontHeight * NewLines + yMargin;
}


protected override Size GetPreferredSize(Graphics g, Object Value)
...{
Size Extents = Size.Ceiling(g.MeasureString(GetText(Value), this.DataGridTableStyle.DataGrid.Font));
Extents.Width += xMargin * 2 + DataGridTableGridLineWidth;
Extents.Height += yMargin;
return Extents;
}

protected override object GetColumnValueAtRow(System.Windows.Forms.CurrencyManager source, int rowNum)
...{

object s = base.GetColumnValueAtRow(source, rowNum);
DataTable dv = (DataTable)Combo.DataSource;
int rowCount = dv.Rows.Count;
int i = 0;

while (i < rowCount)
...{
if( s.ToString().Trim().Equals( dv.Rows[i][Combo.ValueMember].ToString().Trim()))
break;

++i;
}


if(i < rowCount)
return dv.Rows[i][Combo.DisplayMember];

return DBNull.Value;
}


protected override void Paint(Graphics g ,Rectangle Bounds,CurrencyManager Source,int RowNum)
...{

Paint(g, Bounds, Source, RowNum, false);
}


protected override void Paint(Graphics g ,Rectangle Bounds ,CurrencyManager Source ,int RowNum,bool AlignToRight)
...{
string Text = GetText(GetColumnValueAtRow(Source, RowNum));
PaintText(g, Bounds, Text, AlignToRight);
}


protected override void Paint(Graphics g ,Rectangle Bounds ,CurrencyManager Source,int RowNum,Brush BackBrush,Brush ForeBrush,bool AlignToRight)
...{

string Text = GetText(GetColumnValueAtRow(Source, RowNum));
PaintText(g, Bounds, Text, BackBrush, ForeBrush, AlignToRight);
}


protected override void SetDataGridInColumn(DataGrid Value)
...{
base.SetDataGridInColumn(Value);
if(Combo.Parent!=Value)
...{
if(Combo.Parent!=null)
Combo.Parent.Controls.Remove(Combo);

}


if(Value !=null)
Value.Controls.Add(Combo);
}


protected override void UpdateUI(CurrencyManager Source , int RowNum,string InstantText)
...{
Combo.Text = GetText(GetColumnValueAtRow(Source, RowNum));
if(InstantText!=null)
Combo.Text = InstantText;

}



private int DataGridTableGridLineWidth
...{
get
...{
if(DataGridTableStyle.GridLineStyle == DataGridLineStyle.Solid)
return 1;
else
return 0;

}

}

private void EndEdit()
...{
InEdit = false;
Invalidate();
}


private string GetText(Object Value)
...{
if(Value==System.DBNull.Value)
return NullText;

if(Value!=null)
return Value.ToString();
else
return String.Empty;


}


private void HideComboBox()
...{
if( Combo.Focused)
this.DataGridTableStyle.DataGrid.Focus();

Combo.Visible = false;
}


private void RollBack()
...{
Combo.Text = OldVal;
}


private void PaintText(Graphics g, Rectangle Bounds,string Text,bool AlignToRight)
...{

Brush BackBrush = new SolidBrush(DataGridTableStyle.BackColor);
Brush ForeBrush = new SolidBrush(DataGridTableStyle.ForeColor);
PaintText(g, Bounds, Text, BackBrush, ForeBrush, AlignToRight);
}


private void PaintText(Graphics g , Rectangle TextBounds,string Text,Brush BackBrush,Brush ForeBrush,bool AlignToRight)
...{

Rectangle Rect = TextBounds;
RectangleF RectF = (RectangleF)(Rect);
StringFormat Format = new StringFormat();

if(AlignToRight)
Format.FormatFlags = StringFormatFlags.DirectionRightToLeft;


switch(Alignment)
...{
case HorizontalAlignment.Left:
Format.Alignment = StringAlignment.Near;
break;
case HorizontalAlignment.Right:
Format.Alignment = StringAlignment.Far;
break;
case HorizontalAlignment.Center:
Format.Alignment = StringAlignment.Center;
break;
}


Format.FormatFlags = Format.FormatFlags | StringFormatFlags.NoWrap;
g.FillRectangle(BackBrush, Rect);

Rect.Offset(0, yMargin);
Rect.Height -= yMargin;
g.DrawString(Text, DataGridTableStyle.DataGrid.Font, ForeBrush, RectF, Format);
Format.Dispose();

}



}

}




Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2127866


转自CLDE.NET


本文由CLDE.NET原创或整理(收集),如您需转载,请保留一下链接,谢谢!


下一篇:MessageClient
※视频教程※
ASP入门到精通视频教程
西安电科大JSP视频教程
photoshop cs2视频教程
flash动画设计师视频教程
Dreamweaver视频教程
VB从入门到精通视频教程
 
 


网站首页 - 友情链接 - 公司简介 - 联系方式 - 广告投放 - 客户服务 - 错误报告 - 免责声明 - About us
CLDE.NET电脑教程中文网版权所有 未经许可禁止镜象和复制本站资料 MSN:CLDE_NET@hotmail.com
技术支持:CLDE.NET信息中心 鲁ICP备05039940号 友情链接QQ:784079(隐)