日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DataGrid动态绑定模板列

發布時間:2024/4/11 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DataGrid动态绑定模板列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
需求說明:在DataGrid中顯示手機短信過濾類型(手機號碼,業務推廣短信,帳戶變動短信,節日祝福短信),表示是否向手機號碼相應類型的短信。由于被過濾的短信類型可能會動態添加,因此綁定DataGrid時只能通過后臺動態綁定,以便增加短信類型時不用修改aspx頁面。下圖是示例的顯示效果,只要在獲取數據時增加“節日祝福”列,頁面不需要做任何修改,顯示就由左圖內容變成右圖內容。
????

????? 實現過程:下面用代碼說明具體實現。
????? 1.aspx頁面部分,代碼很簡單,在頁面中放一個DataGrid就可以了。
?<form?id="form1"?runat="server">
????????
<div>
????????????
<asp:DataGrid?ID="dgSmsFilters"?Style="z-index:?101;?left:?264px;?position:?absolute;
????????????????top:?152px"
?runat="server"?Width="480px"?Height="200px"?AutoGenerateColumns="False"
????????????????BorderColor
="#3366CC"?BorderStyle="None"?BorderWidth="1px"?BackColor="White"
????????????????CellPadding
="4">
????????????????
<SelectedItemStyle?Font-Bold="True"?ForeColor="#CCFF99"?BackColor="#009999"></SelectedItemStyle>
????????????????
<ItemStyle?ForeColor="#003399"?BackColor="White"></ItemStyle>
????????????????
<HeaderStyle?Font-Bold="True"?ForeColor="#CCCCFF"?BackColor="#003399"></HeaderStyle>
????????????????
<FooterStyle?ForeColor="#003399"?BackColor="#99CCCC"></FooterStyle>
????????????????
<PagerStyle?HorizontalAlign="Left"?ForeColor="#003399"?BackColor="#99CCCC"?Mode="NumericPages">
????????????????
</PagerStyle>
????????????
</asp:DataGrid>
????????
</div>
????
</form>

?????? 2.aspx.cs后臺代碼部分,這部分的作用就是準備好數據,并綁定到DataGrid中。我們注意到給模板列賦值時實例化了ColumnTemplate類。這個類是我們自己定義的類,也是后臺綁定模板列的核心所在,第三部分代碼將演示這個類的實現。
protected?void?Page_Load(object?sender,?EventArgs?e)
????????????
{
????????????????
if?(!Page.IsPostBack)
????????????????
{
????????????????????
this.BindGrid();
????????????????}

????????????}



????????????
//準備示例數據
????????????private?DataTable?GetDates()
????????????
{
????????????????DataTable?dtSmsFilters?
=?new?DataTable("dtSmsFilters");
????????????????DataColumn?dcSmsNum?
=?new?DataColumn("手機號",Type.GetType("System.String"));
????????????????dtSmsFilters.Columns.Add(dcSmsNum);
????????????????
//產生短信過濾類型,實際應根據數據庫中內容動態生成的,列數可以動態添加
????????????????DataColumn?dcSmsFilterType1?=?new?DataColumn("業務推廣",Type.GetType("System.Boolean"));
????????????????dtSmsFilters.Columns.Add(dcSmsFilterType1);
????????????????DataColumn?dcSmsFilterType2?
=?new?DataColumn("帳戶變動",Type.GetType("System.Boolean"));
????????????????dtSmsFilters.Columns.Add(dcSmsFilterType2);
????????????????DataColumn?dcSmsFilterType3?
=?new?DataColumn("節日祝福",?Type.GetType("System.Boolean"));
????????????????dtSmsFilters.Columns.Add(dcSmsFilterType3);
????????????????
//手動添加測試數據
????????????????DataRow?dr;
????????????????
for(int?i=0;i<10;i++)
????????????????
{
????????????????????
//賦值,無實際意義,只為顯示
????????????????????dr?=?dtSmsFilters.NewRow();
????????????????????dr[
0]?=?"1366666888"+i.ToString();
????????????????????dr[
1]?=?i%2==0?true:false;
????????????????????dr[
2]?=?i?%?3?==?0???true?:?false;
????????????????????dr[
3]?=?i?%?4?==?0???true?:?false;
????????????????????dtSmsFilters.Rows.Add(dr);
????????????????}

????????????????
return?dtSmsFilters;
????????????}



????????????
//綁定DataGrid
????????????private?void?BindGrid()
????????????
{
????????????????DataTable?dt?
=?this.GetDates();
????????????????
this.dgSmsFilters.DataSource?=?dt;

????????????????
//添加綁定列,綁定手機號
????????????????BoundColumn?bc?=?new?BoundColumn();
????????????????bc.HeaderText?
=?dt.Columns[0].ColumnName;
????????????????bc.DataField?
=?dt.Columns[0].ColumnName;
????????????????
this.dgSmsFilters.Columns.AddAt(0,bc);

????????????????
//添加模板列,綁定過濾短信類型,模板列的列數是由函數GetDates()生成的DataTable的列數決定的
????????????????for(int?i=1;i<dt.Columns.Count;i++)
????????????????
{
????????????????????TemplateColumn?tc?
=?new?TemplateColumn();
????????????????????tc.HeaderText?
=?dt.Columns[i].ColumnName;
????????????????????tc.ItemTemplate?
=?new?ColumnTemplate("ckb"+i.ToString(),dt.Columns[i].ColumnName);
????????????????????
this.dgSmsFilters.Columns.AddAt(i,tc);
????????????????}

????????????????
this.dgSmsFilters.DataBind();
????????????}


????????3.ColumnTemplate類的實現。繼承自ITemplate接口,并實現了接口方法InstantiateIn(),定義子控件和模板所屬的 Control 對象。
?//ColumnTemplate?從ITemplate繼承。
????????
//InstantiateIn?定義子控件的屬于誰
????????public?class?ColumnTemplate:System.Web.UI.ITemplate
????????
{
????????????
string?id;
????????????
string?bindField;

????????????
public?ColumnTemplate(string?id,string?bindField)
????????????
{
????????????????
this.id?=?id;
????????????????
this.bindField?=?bindField;?
????????????}


????????????
//Override?the?ITemplate.InstantiateIn?method?to?ensure?
????????????
//that?the?templates?are?created?in?a?CheckBox?control?and
????????????
//that?the?CheckBox?object's?DataBinding?event?is?associated
????????????
//with?the?BindData?method.
????????????public?void?InstantiateIn(Control?container)
????????????
{
????????????????CheckBox?ckb?
=?new?CheckBox();
????????????????ckb.ID?
=?this.id;
????????????????ckb.DataBinding?
+=?new?EventHandler(this.BindData);
????????????????container.Controls.Add(ckb);
????????????}


????????????
//Create?a?public?method?that?will?handle?the
????????????
//DataBinding?event?called?in?the?InstantiateIn?method.
????????????public?void?BindData(object?sender,?EventArgs?e)
????????????
{
????????????????CheckBox?ckb?
=?(CheckBox)?sender;
????????????????DataGridItem?container?
=?(DataGridItem)?ckb.NamingContainer;
????????????????
string?isFilter?=?((DataRowView)?container.DataItem)[bindField].ToString();??
????????????????ckb.Checked?
=?bool.Parse(isFilter);
????????????}

????????}


??????源代碼下載地址:?點擊下載完整示例程序 (示例路徑:/WebControls/TemplateColumnDemo.aspx

總結

以上是生活随笔為你收集整理的DataGrid动态绑定模板列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。