2008年2月27日 星期三

ASP.NET's GridView資料綁定方法

有人問包仔說GridView如果不透過ObjectDataSource......之類的元件來綁資料的話,那該如何做呢?
所以包仔就寫了一個簡單的範例如下:

GridTest.aspx

〈div〉
〈asp:Button ID="btnLoad" runat="server" Text="載入" OnClick="btnLoad_Click" /〉
〈asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"〉
〈asp:ListItem Value="0"〉開啟

〈asp:ListItem Value="1"〉關閉

〈/asp:DropDownList〉
〈asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"〉
〈Columns〉
〈asp:BoundField HeaderText="活動日期" DataField="活動日期" 〉
〈ItemStyle CssClass="textLeft" /〉
〈HeaderStyle Width="45%" CssClass="textLeft" /〉
〈/asp:BoundField〉
〈asp:BoundField HeaderText="場次" DataField="場次" 〉
〈ItemStyle HorizontalAlign="Left" /〉
〈HeaderStyle HorizontalAlign="Left" Width="40%" /〉
〈/asp:BoundField〉
〈asp:BoundField DataField="序號" HeaderText="序號" /〉
〈/Columns〉
〈/asp:GridView〉
〈/div〉
GridTest.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class GridTest : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.ViewState["MyData"] = MakeTable();
GridBinding(this.ViewState["MyData"]);
}
}

private DataTable MakeTable()
{
DataTable MyTable = new DataTable("MyTable");
DataColumn StartDate = new DataColumn();
StartDate.ColumnName = "活動日期";
DataColumn SiteRange = new DataColumn();
SiteRange.ColumnName = "場次";
DataColumn ID = new DataColumn();
ID.ColumnName = "序號";
MyTable.Columns.Add(StartDate);
MyTable.Columns.Add(SiteRange);
MyTable.Columns.Add(ID);
return MyTable;
}
private void GridBinding(object sender)
{
this.ViewState["MyData"] = sender;
this.GridView1.DataSource = sender;
this.GridView1.DataBind();
}
protected void btnLoad_Click(object sender, EventArgs e)
{
DataTable dt = (DataTable)ViewState["MyData"];
DataRow newRow;
newRow = dt.NewRow();
newRow["活動日期"] = "2008-08-01";
newRow["場次"] = "不知哪一場";
int Sort = dt.Rows.Count + 1;

newRow["序號"] = Sort.ToString();
dt.Rows.Add(newRow);
this.ViewState["MyDate"] = dt;
GridBinding(this.ViewState["MyDate"]);
}
//選擇讓GridView序號欄位隱藏或是開啟
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
if (DropDownList1.SelectedValue != "0")
{
this.GridView1.Columns[2].Visible = false;
}
else
{
this.GridView1.Columns[2].Visible = true;
}
}
}

操作畫面如下:



HEMiDEMi Technorati Del.icio.us MyShare個人書籤 Yahoo

0 意見: