惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
C
CXSECURITY Database RSS Feed - CXSecurity.com
S
Schneier on Security
Know Your Adversary
Know Your Adversary
Security Latest
Security Latest
Spread Privacy
Spread Privacy
Project Zero
Project Zero
T
The Exploit Database - CXSecurity.com
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
AI
AI
N
News | PayPal Newsroom
A
Arctic Wolf
NISL@THU
NISL@THU
W
WeLiveSecurity
Security Archives - TechRepublic
Security Archives - TechRepublic
Hacker News: Ask HN
Hacker News: Ask HN
P
Palo Alto Networks Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
大猫的无限游戏
大猫的无限游戏
L
Lohrmann on Cybersecurity
Last Week in AI
Last Week in AI
T
Threatpost
The Last Watchdog
The Last Watchdog
博客园_首页
C
Cybersecurity and Infrastructure Security Agency CISA
酷 壳 – CoolShell
酷 壳 – CoolShell
量子位
Engineering at Meta
Engineering at Meta
爱范儿
爱范儿
aimingoo的专栏
aimingoo的专栏
S
Security Affairs
P
Privacy & Cybersecurity Law Blog
B
Blog RSS Feed
AWS News Blog
AWS News Blog
P
Proofpoint News Feed
雷峰网
雷峰网
T
Tenable Blog
Schneier on Security
Schneier on Security
H
Heimdal Security Blog
V2EX - 技术
V2EX - 技术
V
V2EX
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
Secure Thoughts
Latest news
Latest news
Help Net Security
Help Net Security
Jina AI
Jina AI
Stack Overflow Blog
Stack Overflow Blog
The Cloudflare Blog
V
Vulnerabilities – Threatpost
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org

博客园 - xiazhaoxia

关于《会员专区》项目经验分享 dell的1501和640m,买哪个好呢? 数码相机成像好坏的关键?! 我要试试洋酒! 我爱网购! DataGrid数据导出到Excel You are my everything Remeber me by 李孝利 关于oracle中的去除null和空格的问题 致力于blog的新衣服 datagrid小tip(三):导入Excel的问题?! datagrid小tip(二):拼接多层表头 datagrid小tip(一):鼠标的移动和点击变色 相对路径or绝对路径? DataGrid的动态绑定问题(二) 续 oracle中的联合主键查询问题! __doPostBack()无效 ? 屏蔽页面刷新功能 asp.net学习点滴
DataGrid的动态绑定问题(二)
xiazhaoxia · 2006-09-26 · via 博客园 - xiazhaoxia

     最近需要写一个动态绑定的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、保存数据,利用事务提交界面数据到数据库中。不过还有一个问题,如果两个人同时做相同的操作呢,另一个人没有根据前一个人的修改,修改界面数据,那么再次操作,前一个人的修改就无效了!这个问题怎么解决?还有待研究了!