CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

datagrid问题?

楼主roarlion(哮狮)2003-06-01 18:19:11 在 .NET技术 / ASP.NET 提问

我的datagrid是动态绑定的,在绑定后如何再添加模版列(我希望添加到最后一列),还有动态绑定后怎么让datagrid的某一列不显示出来和某一列不能编辑。  
  DataTable   dt=   new   DataTable();  
  //dt从数据库中取数据  
  ........  
   
  this.DataGrid1.DataSource   =   dt.DefaultView   ;  
  /*在这里动态添加列好像只能加到首列   */  
  this.DataGrid1.DataBind();  
  /*在这里又不能添加,好像因为datagrid不更新  
  datagrid有没有类似winform里的refresh让他更新一下  
  */ 问题点数:100、回复次数:20Top

1 楼elliot(!逸轩)回复于 2003-06-01 18:53:42 得分 0

在DataBind()前new一个TemplateColumn,设置相应属性,在DataGrid1.Columns.Add进去  
  DataGrid的DataBind相当于更新一下  
  如果觉得更新后才可以决定怎么添加模板列  
  那么先DataBind一下,添加后再DataBind一下Top

2 楼WSDOTNET(摇钱树)回复于 2003-06-01 19:02:44 得分 0

构造了模板列后,如何动态添加ItemTemplate?Top

3 楼elliot(!逸轩)回复于 2003-06-01 19:12:46 得分 0

不用添加,直接引用新TemplateColumn1.ItemTemplateTop

4 楼roarlion(哮狮)回复于 2003-06-01 19:15:39 得分 0

不行啊,在绑定dt后,datagrid1.Columns.Count怎么还是0?  
  动态加进去还是在首位。  
  Top

5 楼elliot(!逸轩)回复于 2003-06-01 19:21:44 得分 0

先将生成的TemplateColumn添加进datagrid1  
  然后再绑定dt啊  
  Top

6 楼roarlion(哮狮)回复于 2003-06-01 19:31:50 得分 0

我想把TemplateColumn放到最后一列啊Top

7 楼WSDOTNET(摇钱树)回复于 2003-06-01 19:35:21 得分 0

TO:   elliot(!逸轩)   :  
  直接引用新TemplateColumn1.ItemTemplate,可它=null啊?Top

8 楼elliot(!逸轩)回复于 2003-06-01 19:55:19 得分 100

添加不是加在最后一列么?  
   
  to   WSDOTNET(摇钱树):  
  sorry,好像没有这么简单,不太清楚怎么做了Top

9 楼roarlion(哮狮)回复于 2003-06-01 20:01:35 得分 0

是啊,我试过了,而且运行  
  this.DataGrid1.DataSource   =   dt.DefaultView   ;  
  this.DataGrid1.DataBind();  
  后   DataGrid1.Columns.count   =   0     !!!  
  dt中绝对有数据,而且能显示出来  
  我快疯了  
   
  Top

10 楼xrll()回复于 2003-06-01 20:26:46 得分 0

现在帮你试验,请等候!!Top

11 楼roarlion(哮狮)回复于 2003-06-01 21:13:04 得分 0

谢啦!Top

12 楼xrll()回复于 2003-06-01 21:31:33 得分 0

全部列用动态生成的办法已经解决:  
  添加TemplateColumn,内部有三个字段:  
  void   Bindgrid()   {  
                  if((Request.Params["ContractCategoryID"]==   "1")&&(Request.Params["ID"]==   "2")){  
                  SqlDataAdapter   myCommand   =   new   SqlDataAdapter("SELECT   Contractid,   ContractName,ContractNumber,   CustomerID,   OrderDate,Otime,RequiredDate   FROM   SaleContractDetails   WHERE   ProfessionalID="+Request.Params["ProfessionalID"]+"ORDER   BY   ContractID   DESC",   MyConnection);  
                  DataSet   ds   =   new   DataSet();  
                  myCommand.Fill(ds,   "SaleContractDetails");  
  TemplateColumn   tc;  
  tc   =   new   TemplateColumn();  
  tc.HeaderText   =   "合同信息";  
                                  tc.ItemTemplate   =   new   DataGridTemplate(ListItemType.Item,   "ContractName",   "CompanyName",   "RequiredDate");  
  tc.HeaderStyle.HorizontalAlign=HorizontalAlign.Center;  
  tc.ItemStyle.HorizontalAlign=HorizontalAlign.Left;  
  tc.ItemStyle.Width=(Unit)0.50;  
  tc.ItemStyle.Wrap   =   false;  
                                  MyDataGrid.Columns.Add(tc);  
                  MyDataGrid.DataSource   =   ds.Tables["SaleContractDetails"].DefaultView;  
                  MyDataGrid.DataBind();  
  }  
  }  
   
  Top

13 楼xrll()回复于 2003-06-01 21:32:41 得分 0

public   class   DataGridTemplate   :   ITemplate  
        {  
              ListItemType   templateType;  
              string   columnName1,columnName2,columnName3;  
              public   DataGridTemplate(ListItemType   type,   string   colname1,string   colname2,string   colname3)  
              {  
                    templateType   =   type;  
                    columnName1   =   colname1;  
                    columnName2   =   colname2;  
                    columnName3   =   colname3;  
              }  
   
              public   void   InstantiateIn(System.Web.UI.Control   container)  
              {  
                    Literal   lc   =   new   Literal();  
                    Literal   lc2   =   new   Literal();  
                    Literal   lc3   =   new   Literal();  
                  switch(templateType)  
                    {  
                          case   ListItemType.Header:  
                                lc.Text   =   "<B>"   +   columnName1   +   "</B>";  
                                container.Controls.Add(lc);  
                                break;  
                          case   ListItemType.Item:  
                                lc.Text   =   "<B>合同名称:   </B>";  
                                container.Controls.Add(lc);  
                                lc.DataBinding   +=   new   EventHandler(TemplateControl_DataBinding);  
                                lc2.Text   =   "<B>顾&nbsp;&nbsp;&nbsp;&nbsp;客:</B>   ";  
        container.Controls.Add(lc2);  
                              lc2.DataBinding   +=   new   EventHandler(TemplateControl_DataBinding2);  
        lc3.Text   =   "<B>交付时间:</B>   ";  
                                container.Controls.Add(lc3);  
                              lc3.DataBinding   +=   new   EventHandler(TemplateControl_DataBinding3);  
                                break;  
                          case   ListItemType.EditItem:  
                                TextBox   tb   =   new   TextBox();  
                                tb.Text   =   "";  
                                container.Controls.Add(tb);  
                                break;  
                          case   ListItemType.Footer:  
                                lc.Text   =   "<I>"   +   columnName1   +   "</I>";  
                                container.Controls.Add(lc);  
                                break;  
                    }  
              }  
  private   void   TemplateControl_DataBinding(object   sender,   System.EventArgs   e)  
  {  
        Literal   lc;  
        lc   =   (Literal)   sender;  
        DataGridItem   container   =   (DataGridItem)   lc.NamingContainer;  
        lc.Text   +=   ((DataRowView)container.DataItem)[columnName1].ToString()+"<br>";  
  }  
  private   void   TemplateControl_DataBinding2(object   sender,   System.EventArgs   e)  
  {  
      Literal   lc2;  
        lc2   =   (Literal)   sender;  
        DataGridItem   container2   =   (DataGridItem)   lc2.NamingContainer;  
        lc2.Text   +=   ((DataRowView)container2.DataItem)[columnName2].ToString()+"<br>";  
  }  
  private   void   TemplateControl_DataBinding3(object   sender,   System.EventArgs   e)  
  {  
        Literal   lc3;  
        lc3   =   (Literal)   sender;  
        DataGridItem   container3   =   (DataGridItem)   lc3.NamingContainer;  
        lc3.Text   +=   DateTime.Parse(((DataRowView)container3.DataItem)[columnName3].ToString()).ToString("yyyy-MM-dd")+"<br>";  
  }  
  }  
   
  Top

14 楼roarlion(哮狮)回复于 2003-06-01 22:01:58 得分 0

太复杂了,我换方案吧。  
  Top

15 楼OK521(拉登陪我打CS)回复于 2003-06-01 22:17:24 得分 0

dim   ds   as   new   dataset()  
  dim   tb   as   datatable  
  dim   tbcolumn   as   datacolumn  
  tb=new   datatable("table")  
  tbcolumn=new   datacolumn("id",gettype(int32))  
  tb.columns.add(tbcolumn)  
  ds.tables.add(tb)  
   
  链接数据的代码...  
  dad.fill(ds,"table")  
  datagrid.datasource=ds  
  datagrid.databind()  
   
   
  如果要增加一列自动增加在tbcolumn=new   datacolumn("id",gettype(int32))下面加一行:  
  tbcolumn.autoincrement=true  
  Top

16 楼xrll()回复于 2003-06-01 22:26:34 得分 0

相比较动态添加HyperLinkColumn和BoundColumn要容易些:  
  HyperLinkColumn   hc   =   new   HyperLinkColumn();  
  hc   =   new   HyperLinkColumn();  
                                  hc.HeaderText="详细内容";  
  hc.HeaderStyle.BackColor   =   Color.Black;  
  hc.HeaderStyle.ForeColor   =   Color.White;  
  hc.HeaderStyle.HorizontalAlign=HorizontalAlign.Center;  
  hc.ItemStyle.HorizontalAlign=HorizontalAlign.Center;  
  hc.HeaderStyle.Width=200;  
  hc.ItemStyle.Wrap   =   false;  
                                  hc.DataNavigateUrlField="ContractID";  
  hc.DataNavigateUrlFormatString   =   "javascript:window.open('SContractRecordDetails.aspx?ContractID={0}&ContractName="+ContractName+"','_blank','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,revisable=no,left=100,top=0,width=600,height=300');window.opener=null;window.close();";  
                                  hc.DataTextField="OTime";  
  hc.DataTextFormatString="{0}......";  
                                  hc.Target="_new";  
  MyDataGrid.Columns.Add(hc);  
                   
   
  BoundColumn   bc;  
  bc   =   new   BoundColumn();  
  bc.HeaderText   =   "检查时间";  
  bc.DataField   =   "Otime";  
  bc.HeaderStyle.BackColor   =   Color.Black;  
  bc.HeaderStyle.ForeColor   =   Color.White;  
  bc.HeaderStyle.HorizontalAlign=HorizontalAlign.Center;  
  bc.ItemStyle.HorizontalAlign=HorizontalAlign.Center;  
  bc.HeaderStyle.Width=(Unit)0.20;  
  bc.DataFormatString="{0:d}";    
  bc.ItemStyle.Wrap   =   false;  
              MyDataGrid.Columns.Add(bc);  
   
  MyDataGrid.DataSource   =   ds.Tables["SaleContractDetails"].DefaultView;  
  MyDataGrid.DataBind();Top

17 楼roarlion(哮狮)回复于 2003-06-01 22:46:48 得分 0

数据过来了,可和ds的数据也显示出来了,也就是说有两列显示的是同样的内容!Top

18 楼xrll()回复于 2003-06-02 08:47:56 得分 0

MyDataGrid.AutoGenerateColumns   =   false;  
  Top

19 楼saiyang0312(赛杨0312)回复于 2003-06-02 09:38:30 得分 0

xrll()是好人Top

20 楼roarlion(哮狮)回复于 2003-06-02 09:57:46 得分 0

太感谢xrll()   了,你要在兰州我请你吃饭!Top

相关问题

  • datagrid???
  • DataGrid
  • DataGrid
  • datagrid
  • DataGrid
  • DataGrid
  • datagrid
  • Datagrid
  • datagrid
  • DataGrid or MSFlexGrid...

关键词

  • datagrid
  • ds
  • lc
  • hc
  • 添加
  • tbcolumn
  • databind
  • templatecontrol
  • contractid
  • templatecolumn

得分解答快速导航

  • 帖主:roarlion
  • elliot

相关链接

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

广告也精彩

反馈

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