为DataGrid 写一个 DropDownListColumn

类别:.NET开发 点击:0 评论:0 推荐:

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>

显示时

 

 

本文地址:http://com.8s8s.com/it/it44316.htm