CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

怎样才能得到DATAGRID各列的页眉文本?

楼主milchcow(MilchCow)2005-11-01 16:36:12 在 .NET技术 / ASP.NET 提问

当DATAGRID绑定之后,用DataGrid.Columns.Count得到值为0,但用DataGrid.Items(index).Cells(index).Text可以得到相应的单元格数据,有什么办法能够得到DataGrid.Columns(i).HeaderText   的内容呢?注:因为DATEVIEW中TABLE的列数不定,所以不能将AutoGenerateColumns设置为False。  
  我是想在Page.IsPostBack   之后,取得Columns(i).HeaderText的值,不想再次连到数据库中去找TABLE的字段名了。 问题点数:200、回复次数:30Top

1 楼LoveCherry(论成败,人生豪迈;大不了,重头再来!^_^)回复于 2005-11-01 16:45:42 得分 5

东西都已经现出来了直接通过js读页面table的数据Top

2 楼liuredstar(Flying)回复于 2005-11-01 16:46:05 得分 2

for(int   i=0;i   <   DataGrid.Columns.Count-1;i++)  
  {  
  string   HeaderText   =   DataGrid.Columns[i].HeaderText;  
  }Top

3 楼pontus(pontus)回复于 2005-11-01 16:47:37 得分 2

得到HeaderItem啊  
  HeaderItem.Cells[i]   不是页眉吗?Top

4 楼LoveCherry(论成败,人生豪迈;大不了,重头再来!^_^)回复于 2005-11-01 16:50:41 得分 2

<input   type="button"   onclick="alert(document.all.DataGrid1.rows[0].cells[0].innerText)"   value="读取">Top

5 楼stoneallen(我不想说,我很亲切)回复于 2005-11-01 16:59:19 得分 0

当DATAGRID绑定之后,用DataGrid.Columns.Count得到值为0  
   
  不会吧,我刚刚测过都不是为0啊,而且可以直接通过DataGrid1.Columns[i].HeaderText来取啊Top

6 楼LoveCherry(论成败,人生豪迈;大不了,重头再来!^_^)回复于 2005-11-01 17:00:50 得分 5

楼上,那是你没有AutoGenerateColumnsTop

7 楼smallMage(小马哥)回复于 2005-11-01 17:05:31 得分 2

支持楼上滴Top

8 楼stoneallen(我不想说,我很亲切)回复于 2005-11-01 17:13:14 得分 0

回复人:   LoveCherry(论成败,人生豪迈;大不了,重头再来!^_^)   (   )   信誉:111     2005-11-01   17:00:00     得分:   0      
     
  楼上,那是你没有AutoGenerateColumns  
   
  AutoGenerateColumns不管为true还是为false,DataGrid.Columns.Count都不为0啊   ,刚刚有测过,你测过为0吗?  
   
   
       
     
  Top

9 楼milchcow(MilchCow)回复于 2005-11-01 17:25:10 得分 0

当AutoGenerateColumns为true时,DataGrid.Columns.Count是不包含TABLE中的字段。  
  比如说,有这样一个DATAGRID  
  <asp:datagrid   id="DataGrid1"   runat="server"   Width="100%"   AllowSorting="True"   CellPadding="4"  
  BackColor="White"   BorderWidth="1px"   BorderStyle="None"   BorderColor="#3366CC"   PageSize="40">  
  <Columns>  
  <asp:TemplateColumn   HeaderText="TMP1">  
  <ItemTemplate>  
  <asp:CheckBox   id="Chk"   runat="server"   Width="10"></asp:CheckBox>  
  </ItemTemplate>  
  <FooterStyle   Width="10px"></FooterStyle>  
  </asp:TemplateColumn>  
  </Columns>  
  </asp:datagrid>  
   
  AutoGenerateColumns为true  
  DATAGRID绑定一个表TABLE1   ,TABLE分别有字段A1,A2,A3,A4,A5  
  在DATAGRID.DataBind()之后,DataGrid.Columns.Count的值是1而不是6,大家可以试试看.  
  因此,用string   HeaderText   =   DataGrid.Columns[i].HeaderText;的方法就会出错,超出索引了.  
   
  Top

10 楼pontus(pontus)回复于 2005-11-01 17:30:31 得分 0

private   void   DataGrid1_ItemDataBound(object   sender,   System.Web.UI.WebControls.DataGridItemEventArgs   e)  
  {  
  if(e.Item.ItemType   ==   ListItemType.Header)  
  {  
  Response.Write(e.Item.Cells[0].Text);  
  }  
  }Top

11 楼stoneallen(我不想说,我很亲切)回复于 2005-11-01 17:31:25 得分 0

哦,明白,那再向你推荐另外一种方法  
  ((TableCell)DataGrid.Controls[0].Controls[0].Controls[i]).Text//可以获得第i列的HeaderTextTop

12 楼LoveCherry(论成败,人生豪迈;大不了,重头再来!^_^)回复于 2005-11-01 17:35:44 得分 50

三级分别是  
  System.Web.UI.WebControls.ChildTable  
  System.Web.UI.WebControls.DataGridItem  
  System.Web.UI.WebControls.TableCellTop

13 楼jxufewbt(我的目标是5星)回复于 2005-11-02 09:59:53 得分 2

for(int   i=0;i   <   DataGrid.Columns.Count-1;i++)  
  {  
      string   HeaderText   =   DataGrid.Columns[i].HeaderText;  
  }  
  Top

14 楼milchcow(MilchCow)回复于 2005-11-02 10:02:38 得分 0

楼上的这种方法不行的Top

15 楼zhangyu028(听天之音)回复于 2005-11-02 10:23:44 得分 2

milchcow()   说的对,我试了确实是这样AutoGenerateColumns的列都找不到  
  Top

16 楼stoneallen(我不想说,我很亲切)回复于 2005-11-02 10:28:12 得分 0

((TableCell)DataGrid.Controls[0].Controls[0].Controls[i]).Text//可以获得第i列的HeaderText  
   
  试下这方法,我测过AutoGenerateColumns的列可以取到的Top

17 楼milchcow(MilchCow)回复于 2005-11-02 10:35:33 得分 0

((TableCell)DataGrid.Controls[0].Controls[0].Controls[i]).Text//可以获得第i列的HeaderText  
   
  试下这方法,我测过AutoGenerateColumns的列可以取到的  
   
   
   
  =================================================================================  
  我怎么取不到呢Top

18 楼zhangyu028(听天之音)回复于 2005-11-02 10:45:21 得分 0

((TableCell)DataGrid.Controls[0].Controls[0].Controls[i]).Text//可以获得第i列的HeaderText  
   
  我取出来了。可行Top

19 楼foxconn_nich(Blog: http://www.jemy.cn)回复于 2005-11-02 10:48:14 得分 0

private   void   DataGrid1_ItemDataBound(object   sender,   System.Web.UI.WebControls.DataGridItemEventArgs   e)  
  {  
  if(e.Item.ItemType   ==   ListItemType.Header)  
  {  
  for(int   i=0;i   <   e.Item.Cells.Count();i++)  
  {  
  Response.Write(e.Item.Cells[i].Text);  
  }  
  }  
  }  
  Top

20 楼stoneallen(我不想说,我很亲切)回复于 2005-11-02 10:55:01 得分 100

我的很简单的,就一个DataGrid,设置AutoGenerateColumns=true,类似  
  <asp:DataGrid   id="DataGrid1"   runat="server"   AutoGenerateColumns="True">  
  <Columns>  
  <asp:TemplateColumn   HeaderText="test">  
  <ItemTemplate>  
  <asp:CheckBox   id="Chk"   runat="server"   Width="10"></asp:CheckBox>  
  </ItemTemplate>  
  </asp:TemplateColumn>  
  </Columns>  
  </asp:DataGrid>  
  后台绑定两条记录(不是通过数据库绑定,手工绑定的),有四列,类似  
  private   void   Page_Load(object   sender,   System.EventArgs   e)  
  {  
  //   在此处放置用户代码以初始化页面  
  if(!IsPostBack)  
  {  
  GridBind();  
  }  
  }  
  private   void   GridBind()  
  {  
  DataTable   dt   =   new   DataTable();  
  DataColumn   dc1   =   new   DataColumn();  
  dc1.ColumnName   =   "a";  
  dt.Columns.Add(dc1);  
  DataColumn   dc2   =   new   DataColumn();  
  dc2.ColumnName   =   "b";  
  dt.Columns.Add(dc2);  
  DataColumn   dc3   =   new   DataColumn();  
  dc3.ColumnName   =   "c";  
  dt.Columns.Add(dc3);  
  DataColumn   dc4   =   new   DataColumn();  
  dc4.ColumnName   =   "d";  
  dt.Columns.Add(dc4);  
  DataRow   dr;  
  dr   =   dt.NewRow();  
  dr["a"]   =   "a1";  
  dr["b"]   =   "b1";  
  dr["c"]   =   "c1";  
  dr["d"]   =   "d1";  
  dt.Rows.Add(dr);  
  dr   =   dt.NewRow();  
  dr["a"]   =   "a2";  
  dr["b"]   =   "b2";  
  dr["c"]   =   "c2";  
  dr["d"]   =   "d2";  
  dt.Rows.Add(dr);  
  this.DataGrid1.DataSource   =   dt;  
  this.DataGrid1.DataBind();  
  }  
  再加一个按钮测试是否可以通过该方法获得各列的HeaderText  
  private   void   Button2_Click(object   sender,   System.EventArgs   e)  
  {  
  Random   a   =   new   Random();  
  int   i   =   a.Next(5);//因为一共有五列,包括四列是AutoGenerateColumns,所以随机抽取数字0到4  
  Response.Write("第"   +   i   +   "列的值为:"   +   ((TableCell)DataGrid1.Controls[0].Controls[0].Controls[i]).Text);//测试结果对不对  
  }  
  所有随机结果如下:  
  第0列的值为:test  
  第1列的值为:a  
  第2列的值为:b  
  第3列的值为:c  
  第4列的值为:d  
  结果跟我的DataGrid显示的一样  
  test     a       b       c       d         -----各列的Header  
              a1     b1     c1     d1       -----对应的数据  
              a2     b2     c2     d2       -----对应的数据  
  你可以参考下跟你的有什么不同吗?我就觉得通过数据库绑定和手工绑定没什么区别Top

21 楼milchcow(MilchCow)回复于 2005-11-02 10:57:51 得分 0

foxconn_nich(——   http://www.joke-online.net   ——)    
   
  的方法是在DATAGRID.DataBind()的时候取得.HeaderTEXT而不是在Page.IsPostBack之后取得的Top

22 楼stoneallen(我不想说,我很亲切)回复于 2005-11-02 11:04:39 得分 0

我的就是在Page.IsPostBack之后取得的呀Top

23 楼milchcow(MilchCow)回复于 2005-11-02 11:25:46 得分 0

OK,结贴Top

24 楼ye_zi(行到水穷处·坐看云起时)回复于 2005-11-02 11:29:56 得分 0

if   (this.drpd1.SelectedIndex==0)   return;  
  ArrayList   alist   =   new   ArrayList();  
  for   (int   i=0;i<dgList.Columns.Count;i++)  
  {  
  string   aa   =   dgList.Columns[i].HeaderText;  
  if   (drpd1.Items.FindByText(aa)!=null)  
  alist.Add(i);  
  }  
  tbx1.Text   =   tbx1.Text.Replace(","+this.drpd1.SelectedValue,"");  
   
  Hashtable   ht=new   Hashtable();  
  ht.Add("userid",Session["USER_ID"].ToString());  
  if(assigncond=="COMMON")  
  ht.Add("dsid","1");  
  if(assigncond=="MAN")  
  ht.Add("dsid","2");  
   
  if(tbx1.Text=="")  
  ht.Add("xslb",tbx1.Text);  
  else  
  ht.Add("xslb",tbx1.Text.Substring(1));  
  DataSet   ds=PublicClass.getDs("410",ht);  
   
  this.drpd1.Items.RemoveAt(this.drpd1.SelectedIndex);  
  for   (int   i=0;i<dgList.Columns.Count;i++)  
  {  
  string   aa   =   dgList.Columns[i].HeaderText;  
  if   (drpd1.Items.FindByText(aa)==null)    
  {        
  if   (alist.IndexOf(i)>=0)  
        dgList.Columns[i].Visible   =   true;  
  }  
  }  
  if   (this.drpd1.Items.Count==1)  
  {  
  this.drpd1.Visible   =   false;  
  this.Label2.Visible   =   false;  
  }Top

25 楼xiahouwen(武眉博<活靶子.NET>)回复于 2005-11-02 11:32:35 得分 0

 
  http://www.aspxboy.com/284/archive.aspxTop

26 楼smin1994(smin1994)回复于 2005-11-02 12:29:26 得分 0

private   void   DataGrid1_ItemDataBound(object   sender,   System.Web.UI.WebControls.DataGridItemEventArgs   e)  
  {  
  if(e.Item.ItemType   ==   ListItemType.Header)  
  {  
  Response.Write(e.Item.Cells[0].Text);  
  }  
  }  
  Top

27 楼shoutor(www.mouxiao.com)回复于 2005-11-02 12:36:42 得分 2

for(int   i=0;i   <   DataGrid.Columns.Count-1;i++)  
  {  
  string   HeaderText   =   DataGrid.Columns[i].HeaderText;  
  }  
  Top

28 楼zeusvenus()回复于 2005-11-02 12:42:10 得分 5

用js方法,LoveCherry那个可以。Top

29 楼hchxxzx(NET?摸到一点门槛)回复于 2005-11-02 13:41:25 得分 20

其实,在DATAGRID中,如果熟悉该控件的组成原理,想要求取它的页眉文本并不是难事。  
  1.在DATAGRID控件下的第一个子控件,实际对应此控件所生成的表,this.myGrid.Controls[0]  
  2.在生成的子控件表中,每一行都是一个子控件,假设你生成了10行记录,那么,第0个控件即为你的页眉行,第11个控件即为你的页脚本行,总共12个子控件。  
  页眉行控件  
  this.myGrid.Controls[0].Controls[0]  
  页脚行控件  
  this.myGrid.Controls[0].Controls[this.myGrid.Controls[0].Controls.Count]  
  3.页眉行里面的各列(TableCell)即为页眉行控件的子控件  
  TableCell   myCell   =   (TableCell)this.myGrid.Controls[0].Controls[0];  
  4.如果是自动绑定生成数据,则页眉文本即在上述的TableCell控件里(myCell.Text),如果有加入排序的,那么在TableCell控件内,应还有一个LinkButton控件,求取此控件之后,即可求取它的文本。  
  LinkButton   mybut   =   (LinkButton)myCell.Controls[0];  
  5.需要知道某个控件下的子控件数量或控件类型,可分别使用   Controls.Count.ToString()及Controls.GetType().ToString()来获得。  
   
  以下分别为求取模板列方式绑定的DATAGRID及以自动绑定方式生成的DATAGRID内,如何求取该控件的页眉文本的代码。  
   
  //在使用模板列的情况下求取值  
  //求取页眉文本  
  LinkButton   mylnkbut   =   (LinkButton   )this.myGrid.Controls[0].Controls[0].Controls[0].Controls[0];  
  this.Response.Write(mylnkbut.Text);  
   
  //在自动绑定列中求取页眉文字  
  TableCell   myCell   =   (TableCell)this.myGrid.Controls[0].Controls[0].Controls[0];  
  this.Response.Write(myCell.Text);  
   
  Top

30 楼xiaofeixia__9999(光之影)回复于 2005-11-02 14:51:32 得分 1

表个签Top

相关问题

  • DataGrid列的页眉文本是DataGrid.Items[*].Cells[*].Text,那么数据字段是什么
  • datagrid 页眉合并
  • 关于datagrid的页眉?
  • Datagrid页眉控件问题?
  • 请教DataGrid页眉问题。
  • 为什么页眉文本也被我赋值了
  • 如何控制DataGrid页眉的宽度?
  • datagrid页眉格式控制问题?
  • DataGrid简单问题,关于页眉?
  • DataGrid的页眉问题:DataGrid页眉的第一行有一个 CheckBox全选按钮,实现全选功能。

关键词

  • datagrid
  • dc
  • 数据库
  • dr
  • datacolumn
  • drpd
  • 绑定
  • 测过
  • headertext
  • dt

得分解答快速导航

  • 帖主:milchcow
  • LoveCherry
  • liuredstar
  • pontus
  • LoveCherry
  • LoveCherry
  • smallMage
  • LoveCherry
  • jxufewbt
  • zhangyu028
  • stoneallen
  • shoutor
  • zeusvenus
  • hchxxzx
  • xiaofeixia__9999

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo