欢迎来到飞鸟慕鱼博客,开始您的技术之旅!
当前位置: 首页知识笔记正文

数据网格的动态绑定(二)最近

终极管理员 知识笔记 78阅读

你需要写一个动态绑定的数据网格。数据库包含所有字段的集合,每个用户可以显示的字段也存在于数据库中。我的解决方案是获取所有字段,并将它们与标志表中字段的状态进行比较。1.前四列是固定的,包括表中的主键,它在更新数据时使用。在DataGrid (1)的动态绑定问题中也写过绑定方法。1 #区域绑定前四个固定列,隐藏前两列(yf,zgdm,xm,ZT)2 for(inti=0;i5;I)3 { 4 boundcolumnbc=newBoundColumn();五nbsp公元前。DataField=ds。表格[0]。列[i]。ColumnName公元前6年。可见=假;7if(i==2)8{9bc。HeaderText=' name公元前10年。HeaderStyle . Width=40公元前11年。可见=真;12}

(0, 128, 128, 1)">13                 else if( i==4)
14                 {
15                     bc.HeaderText="状态";
16                     bc.HeaderStyle.Width =40;
17                     bc.Visible =true;
18                 }
19                 DataGrid1.Columns.Add(bc);    
20                 txtColumnName.Text +=ds.Tables[0].Columns[i].ColumnName;
21                 txtColumnName.Text +=",";
22             }    
23             #endregion
2、其它的列是需要用户进行录入数据的,并且如果有数据也是需要显示的。所以初步想的是需要绑定TextBox上去,而且是ItemTemplate绑定,所以这就需要自定义模板列了。
        
MyColumn myCol=new MyColumn();
                                myCol.HeaderText
=dr.ItemArray[1].ToString();
                                myCol.HeaderStyle.Width 
=40;
                                myCol.DataTextField
=ds.Tables[0].Columns[j].ColumnName;
                                myCol.ItemStyle.Width 
=40;
                                DataGrid1.Columns.Add(myCol);            

3、自定义模板列的类,引用页记得要注册一下就可以了。
public class MyColumn :DataGridColumn
    {
        
public string DataTextField; 
        
public string DataValueField; 
        
public DataTable DataSource; 

        
public override void InitializeCell(TableCell cell, int columnIndex, ListItemType itemType)
        {
            
base.InitializeCell (cell, columnIndex, itemType);
            
switch(itemType)
            {
                
case ListItemType.Header :
                    cell.Text 
=this.HeaderText;
                    cell.Width
=this.HeaderStyle.Width ;
                    
break;
                
case ListItemType.Item: case ListItemType.AlternatingItem :
                    cell.DataBinding
+=new EventHandler(cell_DataBinding);
                    cell.Width 
=this.ItemStyle.Width ;
                    TextBox tb
=new TextBox ();
                    tb.Width
=40;
                    cell.Controls.Add(tb);
                    
break;                    
            }
        }

        
private void cell_DataBinding(object sender, EventArgs e)
        {
            TableCell cell
=(TableCell)sender;
            TextBox tb
=(TextBox)cell.Controls[0]; 
            DataGridItem dgi
=(DataGridItem)cell.NamingContainer;
            tb.Text
=(DataBinder.Eval(dgi.DataItem,this.DataTextField)).ToString(); 

        }
    }
4、数据录入:利用javascript函数在界面上实现的。还能进行一下批改。
5、遇到的问题
     Q:点击页面上的按钮,整个datagrid就不见了?奇怪,就算要刷新数据也应该让我先读一下啊,结果DataGrid1.Items.Count=0。
     A:原来用这种方法进行datagrid 的绑定,是不能写在if(!Page.IsPostBack){}这里的
     Q:关于隐藏列的问题,用visible=false的方法,在前台javascript的方法中是读不到该列的。
     A:为该列绑定属性display:none
6、保存数据,利用事务提交界面数据到数据库中。不过还有一个问题,如果两个人同时做相同的操作呢,另一个人没有根据前一个人的修改,修改界面数据,那么再次操作,前一个人的修改就无效了!这个问题怎么解决?还有待研究了!

     
     

标签:
声明:无特别说明,转载请标明本文来源!