最近需要写一个动态绑定的datagrid,数据库存着所有字段的合集,每个用户能显示的字段也是存在数据库中的。我的解决方法是取得所有的字段,再与标志表中字段的状态进行比对。
1、前四列是固定的,包括表中的主键,更新数据的时候得用到,绑定的方法在DataGrid的动态绑定问题(一) 也有写过。

 1 #region 绑定前四列固定列,且隐藏前两列(yf,zgdm,xm,zt)
 2             for(int i=0;i<5;i++)
 3             {
 4                 BoundColumn bc=new BoundColumn();                                    
 5                 bc.DataField =ds.Tables[0].Columns[i].ColumnName;    
 6                 bc.Visible =false;
 7                 if(i==2)
 8                 {
 9                     bc.HeaderText="姓名";
10                     bc.HeaderStyle.Width =40;
11                     bc.Visible =true;
12                 }
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、保存数据,利用事务提交界面数据到数据库中。不过还有一个问题,如果两个人同时做相同的操作呢,另一个人没有根据前一个人的修改,修改界面数据,那么再次操作,前一个人的修改就无效了!这个问题怎么解决?还有待研究了!

转载于:https://www.cnblogs.com/xiazhaoxia/archive/2006/09/26/514994.html

DataGrid的动态绑定问题(二)相关推荐

  1. DataGrid 数据绑定使用小结二(自定义列)

    Silverlight中DataGrid控件提供了三种模板分别是(DataGridCheckBoxColumn,DataGridTextColumn,DataGridTemplateColumn,Ro ...

  2. datagrid资料+ by iCeSnaker - Program rhapsody

    datagrid资料+ by iCeSnaker - Program rhapsody 关于datagrid的打印 http://www.chinaaspx.com/article/csharp/29 ...

  3. 【转贴CSDN】关于DataGrid的精华

    [转贴CSDN]关于DataGrid的精华 1.DataGrid动态模板列更新数据并且分页的例子 http://www.cnblogs.com/lovecherry/archive/2005/03/2 ...

  4. 【分享】WebForm中DataGrid的20篇经典文章

    1.DataGrid动态模板列更新数据并且分页的例子 http://www.cnblogs.com/lovecherry/archive/2005/03/26/126102.html 2.DataGr ...

  5. (转)DataGrid资料

    DataGrid的正反双向排序 http://dev.csdn.net/develop/article/26/26817.shtm DataGrid删除确认及Item颜色交替 http://dev.c ...

  6. 【分享】WebForm中DataGrid的经典文章 及一些网址收藏

    [分享]WebForm中DataGrid的20篇经典文章 自认为以下文章比较经典,希望对初学者有用^_^ 1.DataGrid动态模板列更新数据并且分页的例子 http://www.cnblogs.c ...

  7. DataGrid用法集锦[收藏]

    关于datagrid的打印 http://www.chinaaspx.com/article/csharp/295.htm C#中为DataGrid添加下拉列表框 http://www.cnblogs ...

  8. DataGrid技巧大集合(转载)

    DataGrid的正反双向排序 http://dev.csdn.net/develop/article/26/26817.shtm删除确认及Item颜色交替 http://dev.csdn.net/d ...

  9. DataGrid用法集锦

    关于datagrid的打印 http://www.chinaaspx.com/article/csharp/295.htm C#中为DataGrid添加下拉列表框 http://www.cnblogs ...

  10. 【引用】DataGrid技巧大集合

    引用自:http://www.cnblogs.com/iCeSnaker/archive/2004/07/31/29017.aspx DataGrid的正反双向排序 http://dev.csdn.n ...

最新文章

  1. mysql没有frm文件_【1.1】mysql frm文件丢失(ibd文件丢失)
  2. 中国@代码生成技术@国产
  3. asp.net使用for循环实现Datalist的分列显示功能
  4. 引用参考文献_引用参考文献时应注意些什么
  5. JSP动作和内置对象
  6. 还在用ABAP进行SAP产品的二次开发?来了解下这种全新的二次开发理念吧
  7. 【今日CS 视觉论文速览】 24 Dec 2018
  8. 开发人员指南 Googlemap API教程
  9. linux openssl离线安装路径,离线安装openssl-devel顺序
  10. 帆软报表重要Activator之DesignerStartup中的GlobalListenerProvider扩展开发
  11. Oracle 函数大全(字符串函数,数学函数,日期函数,逻辑运算函数,其他函数)...
  12. 816D.Karen and Test 杨辉三角 规律 组合
  13. 韦东山linux嵌入式学习之路
  14. SketchUp 有哪些实用的插件?
  15. xy转utm坐标(个人推算)
  16. SQLServer用COMPUTE 和 COMPUTE BY 汇总数据
  17. 2.python制作的倒计时小工具
  18. 平板电脑如何刷linux,平板电脑刷windows的方法是什么_如何把平板刷windows图文步骤...
  19. android 百度离线下载速度慢,Android手机解决百度网盘下载速度限制
  20. cuda学习笔记(4)

热门文章

  1. Mac电脑用CrossOver安装的Windows软件位置
  2. python之路8-内置模块介绍
  3. PAT Basic 1071. 小赌怡情(15)
  4. [Hyper-V]使用操作系统模板创建新的虚拟机
  5. 使用Eclipse插件DB viewer进行MySQL(SQL Server)等 数据库操作
  6. JAVA获取文件本身所在的磁盘位置
  7. 解决问题--Could not get JDBC Connection
  8. 移动端webview canvas bug
  9. 面试再问HashMap,求你把这篇文章发给他!
  10. Docker 架构原理剖析,万字详解!