yasker的技术blog

内敛,以致外现

关于DataGrid的一点基础东西
1、列名显示
MS让DataGrid的外观配置,包括列名的显示,全部交给了GridTableStylesCollection。
DataGridTableStyle是一个DataGridTableStyle集合,由MappingName确定唯一性。
而GridColumnStyles 属性确定其中列的具体情况,也是一个集合。
列的属性可以为DataGridBoolColumn或者DataGridTextBoxColumn,常用后者。
列同样有由MappingName确定其唯一性,在DataSet/DataTable中,与其中的ColumnName对应。
DataGridTextBoxColumn.HeaderText就是列名的显示值。
还有其他许多很有用的属性。
但是:我用Delphi的时候,从来没碰到要设置一下列名这么简单的事情竟然需要这么复杂的过程,我根本没想到去用其他的属性……
另外,不是有DataTable.Columns.Caption么?为何DataGrid死抓住ColumnName不放而不去看看Caption?
代码:
command = conn.CreateCommand();
command.CommandText = "Select ID, NAME,REMARK From TBL;";
command.CommandType = CommandType.Text;
DataTable table = new DataTable();
adapter = new FbDataAdapter(command);
adapter.Fill(table);

table.TableName = "TBL";        //其实table原来的TableName为空
grid.DataSource = table;
DataGridTableStyle ts = new DataGridTableStyle();
DataGridTextBoxColumn t1 = new DataGridTextBoxColumn() ,
        t2 = new DataGridTextBoxColumn() ,
        t3 = new DataGridTextBoxColumn();
ts.MappingName = table.TableName;
t1.MappingName = "ID"; t1.HeaderText = "编号";
t1.NullText = "自动编号";
t2.MappingName = "NAME"; t2.HeaderText = "名称";
t2.NullText     = "";
t3.MappingName = "REMARK"; t3.HeaderText = "备注";
t3.NullText = "";
ts.GridColumnStyles.Add(t1);
ts.GridColumnStyles.Add(t2);
ts.GridColumnStyles.Add(t3);
grid.TableStyles.Add(ts);

2、选择行
找到了选择行的一个好代码,利用了DataGridTextBoxColumn.TextBox.Enter属性。
主要是把选择做成了一个事件,极为方便调用,我稍微改了一下,放到了我的公用类里了(所以需要static)。
使用时直接把selectLineInit放到Form的OnLoad里面就行了:
public static void selectLineInit(DataGridTableStyle ts)
{
        foreach (DataGridColumnStyle dgCol in ts.GridColumnStyles)
        {
                DataGridTextBoxColumn dgtCol = dgCol as DataGridTextBoxColumn;
                dgtCol.TextBox.Enter += new EventHandler( onSelectLine);
        }
}

public static void onSelectLine( object sender, EventArgs e)
{
        Control txtContentBox = sender as Control;
        txtContentBox.Visible = false;
        DataGrid dgParent = txtContentBox.Parent as DataGrid;
        dgParent.Select(dgParent.CurrentCell.RowNumber);
}


阅读更多
个人分类: .net
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

关于DataGrid的一点基础东西

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭