为DataGrid 写一个 DropDownListColumn

Net下有一个类DataGridColumn

作为 DataGrid 控件的不同列类型的基类。

有关此类型所有成员的列表,请参阅 DataGridColumn 成员。

System.Object
   System.Web.UI.WebControls.DataGridColumn
      System.Web.UI.WebControls.BoundColumn
      System.Web.UI.WebControls.ButtonColumn
      System.Web.UI.WebControls.EditCommandColumn
      System.Web.UI.WebControls.HyperLinkColumn
      System.Web.UI.WebControls.TemplateColumn

我们完成可以写一个继承DataGirdColumn的类,这样就成了。DropDownListColumn,CheckBoxListColumn等。

 

控件的代码如下。

using System;
using System.Web.UI;
using System.Web.UI.WebControls ;
using System.Collections ;
using System.Data ;


namespace CustomColumn
{
 /// <summary>
 /// DataGridCustomColumn 的摘要说明。
 /// </summary>
 public class DropDownListColumn :System.Web.UI.WebControls.DataGridColumn
 {
  //数据源
  public DataTable DataSource ;
  //显示的文本字段
  public string DataTextField ;
  //
  public string DataValueField ;

  //DataGrid中要绑定的字段

  public string DataField ;


  public string DataShowField;
        

  public DropDownListColumn()
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //
    

  }

  public override void InitializeCell(TableCell cell, int columnIndex, ListItemType itemType)
  {
   base.InitializeCell (cell, columnIndex, itemType);
   switch(itemType)
   {
     case ListItemType.Header :
        cell.Text = this.HeaderText ;
     break;

    case ListItemType.Item:case ListItemType.AlternatingItem :
        cell.DataBinding +=new EventHandler(cell_ItemDataBinding);
                    break;

    case ListItemType.EditItem :
     cell.DataBinding +=new EventHandler(cell_EditItemDataBinding);
     //========================
     DropDownList drp = new DropDownList();
     cell.Controls.Add(drp);
        break;


   }
  }

  private void cell_ItemDataBinding(object sender, EventArgs e)
  {
             TableCell cell =(TableCell)sender ;
    DataGridItem DGI =(DataGridItem)cell.NamingContainer ;
   try
   {
    cell.Text = (DataBinder.Eval(DGI.DataItem,DataShowField)).ToString();
   }
   catch
   {
    throw new Exception("请设置字段");
   }
  }

  private void cell_EditItemDataBinding(object sender,EventArgs e)
  {
   TableCell cell =(TableCell)sender ;
            DropDownList drp =(DropDownList)cell.Controls[0];     ;
   ListItem item  ;
   DataGridItem DGI ;   
   try
   {
   
    //================
    drp.Items.Add(new ListItem("请选择","-1"));
    //
   
     for(int k=0;k<=DataSource.Rows.Count -1;k++)
     {
      DataRow dr =  DataSource.Rows[k];
      item = new ListItem();
      item.Text = dr[DataTextField].ToString();
      item.Value = dr[DataValueField].ToString();
      drp.Items.Add(item);
     }

    

    DGI =(DataGridItem)cell.NamingContainer ;

    string Value = DataBinder.Eval(DGI.DataItem,DataField).ToString();

    item = drp.Items.FindByValue(Value);
    if(item!=null)
    {
     item.Selected = true;
    }
   }
   catch
   {
    throw new Exception("数据源不对。");
   }

  }

   
 }
}

 

Aspx页面调用。

先注册:

<%@ Register TagPrefix="DrpColumn" NameSpace="CustomColumn" Assembly="DropDownListColumn" %>

调用<%@ Register TagPrefix="DrpColumn" NameSpace="CustomColumn" Assembly="DropDownListColumn" %><%@ Register TagPrefix="DrpColumn" NameSpace="CustomColumn" Assembly="DropDownListColumn" %><%@ Register TagPrefix="DrpColumn" NameSpace="CustomColumn" Assembly="DropDownListColumn" %>

<asp:DataGrid id="dgTeacher" runat="server" Width="100%" AutoGenerateColumns="False" AllowPaging="True"
          CssClass="DataGrid" BorderColor="#333333" BorderStyle="Solid">
          <Columns>
           <DrpColumn:DropDownListColumn HeaderText="导师"></DrpColumn:DropDownListColumn>
           <asp:BoundColumn DataField="SpecName2" ReadOnly="True" HeaderText="主修专业"></asp:BoundColumn>
           <DrpColumn:DropDownListColumn DataShowField="SpecName" DataField="SpecGUID" HeaderText="兼岗专业"></DrpColumn:DropDownListColumn>
           <asp:BoundColumn DataField="CreatedDT" ReadOnly="True" HeaderText="创建日期" DataFormatString="{0:d}"></asp:BoundColumn>
           <asp:BoundColumn DataField="CreatedBY" ReadOnly="True" HeaderText="创建者"></asp:BoundColumn>
           <asp:BoundColumn DataField="SrcIP" ReadOnly="True" HeaderText="来源IP"></asp:BoundColumn>
           <asp:BoundColumn DataField="UpdatedBY" ReadOnly="True" HeaderText="修改者"></asp:BoundColumn>
           <asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新" HeaderText="操作" CancelText="取消" EditText="编辑"></asp:EditCommandColumn>
           <asp:ButtonColumn Text="&lt;span OnClick='return confirmdel();'&gt;删除&lt;/span&gt;" HeaderText="操作"
            CommandName="Delete"></asp:ButtonColumn>
          </Columns>
          <PagerStyle Mode="NumericPages"></PagerStyle>
         </asp:DataGrid>

显示时

 

 

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 2

打赏作者

dbx

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值