天天看點

為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>

繼續閱讀