在Winform的DataGrid添加自定义boolColumn

似乎这是个比较常用的功能,不过还是第一次作,没有想到什么更好的方法,我是用一个前台的临时表实现的.
测试用的数据库为SqlServer ,默认的Northwind数据库,Customers表.
新建一个窗体,加入一个DataGrid,先取表中所有数据,放到数据集dsCustomer里面.
然后建立一个临时表dtCustomer,拷贝dsCustomer里面存放数据的表的副本到dtCustomer.加入选择字段dcSelected(DataColumn类),遍历一次dtCustomer里面的记录,给dcSelected字段赋值.

建立表格样式,字段样式当然要根据dtCustomer的结构来定义了,并映射到表dtCustomer,然后绑定就可以.

使dcSelected列可以修改,只要在DataGrid的单击事件中加入代码就可以了.

具体需要的代码如下:
1.创建绑定时需要的临时数据表.

private DataTable dtTemp = null;

        
private void CreateTempTable(DataSet dsInit, string tableName)
        
{
            
if (dsInit != null && dsInit.Tables[0!= null)
            
{
                dtTemp 
= dataSet11.Tables[0].Copy();
                DataColumn dc 
= new DataColumn("IsSelected"typeof(bool));
                dtTemp.Columns.Add(dc);
                
foreach(DataRow dr in dtTemp.Rows)
                
{
                    dr[
"IsSelected"= true;
                }
                           
            }

            dtTemp.TableName 
= tableName;            
        }

2.设置DataGrid的样式(这里面的列就按照需要的自己定义好了,前提是必须包含在你所创建的临时数据表中)

    private void SetDataGridTyle(string tableName)
        
{
            DataGridTableStyle tableStyle 
= new DataGridTableStyle();
            tableStyle.MappingName 
= tableName;
            DataGridBoolColumn dgbcSelected 
= new DataGridBoolColumn();
            dgbcSelected.HeaderText 
= "IsSelected";
            dgbcSelected.MappingName 
= "IsSelected";
            tableStyle.GridColumnStyles.Add(dgbcSelected);

            DataGridTextBoxColumn dgtbcCity 
= new DataGridTextBoxColumn();
            dgtbcCity.HeaderText 
= "Cityy"            ;
            dgtbcCity.MappingName 
= "City";
            tableStyle.GridColumnStyles.Add(dgtbcCity);
            
this.dataGrid1.TableStyles.Clear();
            
this.dataGrid1.TableStyles.Add(tableStype);
        }

3.允许单击修改选择列

private void dataGrid1_Click(object sender, System.EventArgs e)
        
{
            
if (dataGrid1.CurrentCell.ColumnNumber == 0)
            
{
                
bool s = false;
                
if (dtTemp.DefaultView[dataGrid1.CurrentRowIndex]["IsSelected"== DBNull.Value)
                
{
                    s 
= true;
                }

                
else
                
{
                    s 
= bool.Parse(dtTemp.DefaultView[dataGrid1.CurrentRowIndex]["IsSelected"].ToString());
                }

                dtTemp.DefaultView[dataGrid1.CurrentRowIndex][
"IsSelected"= !s;
                dataGrid1.Refresh();
            }

        }

通过上述操作,我们就可以在不影响显示的情况下,根据行记录前面的CheckBox来选择我们需要的数据.
 
后面又补充了在列标题加入CheckBox实现全选功能,不过有些牵强...
http://snowlove67.cnblogs.com/archive/2005/12/20/300910.html

posted @ 2005-11-23 13:33  家中慢步  阅读(2345)  评论(5编辑  收藏  举报