<%@ Page Language="C#" EnableViewState="true" %> <%@ Import Namespace="System.Data" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> private DataTable stoveTable = null; protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { //创建 EmptyDataTemplate this.GridView_list.DataBind(); } } protected void GridView_list_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { String usage = DataBinder.Eval(e.Row.DataItem, "usage").ToString(); String steelKind = DataBinder.Eval(e.Row.DataItem, "steelKind").ToString(); String castingTon = DataBinder.Eval(e.Row.DataItem, "castingTon").ToString(); DropDownList x1 = e.Row.FindControl("x1") as DropDownList; DropDownList x2 = e.Row.FindControl("x2") as DropDownList; TextBox x3 = e.Row.FindControl("x3") as TextBox; x3.Text = castingTon; ListItem xx1 = x1.Items.FindByValue(usage); if (xx1 != null) xx1.Selected = true; ListItem xx2 = x2.Items.FindByValue(steelKind); if (xx2 != null) xx2.Selected = true; } } protected void LinkButton1_Click(object sender, EventArgs e) { DropDownList x1, x2; TextBox x3; if (GridView_list.Rows.Count == 0) { x1 = GridView_list.Controls[0].Controls[0].FindControl("x1") as DropDownList; x2 = GridView_list.Controls[0].Controls[0].FindControl("x2") as DropDownList; x3 = GridView_list.Controls[0].Controls[0].FindControl("x3") as TextBox; } else { GridViewRow r = GridView_list.FooterRow; x1 = r.FindControl("x1") as DropDownList; x2 = r.FindControl("x2") as DropDownList; x3 = r.FindControl("x3") as TextBox; } if (ViewState["dt"] == null) { stoveTable = new DataTable(); stoveTable.Columns.Add("usage", typeof(String)); stoveTable.Columns.Add("steelKind", typeof(String)); stoveTable.Columns.Add("castingTon", typeof(String)); } else { stoveTable = (DataTable)ViewState["dt"]; } DataRow newRow = stoveTable.NewRow(); newRow["usage"] = x1.SelectedValue; newRow["steelKind"] = x2.SelectedValue; newRow["castingTon"] = x3.Text; stoveTable.Rows.Add(newRow); ViewState["dt"] = stoveTable; this.GridView_list.DataSource = stoveTable; this.GridView_list.DataBind(); } protected void LinkButton2_Click(object sender, EventArgs e) { if (ViewState["dt"] == null) { return; } stoveTable = (DataTable)ViewState["dt"]; if (stoveTable.Rows.Count < 1) return; stoveTable.Rows.RemoveAt(stoveTable.Rows.Count - 1); ViewState["dt"] = stoveTable; this.GridView_list.DataSource = stoveTable; this.GridView_list.DataBind(); } protected void x1_SelectedIndexChanged(object sender, EventArgs e) { DropDownList x1 = sender as DropDownList; GridViewRow r = x1.Parent.Parent as GridViewRow; if (ViewState["dt"] == null) { Response.Write("Error"); return; } stoveTable = (DataTable)ViewState["dt"]; stoveTable.Rows[r.RowIndex]["usage"] = x1.SelectedValue; ViewState["dt"] = stoveTable; this.GridView_list.DataSource = stoveTable; this.GridView_list.DataBind(); } protected void x2_SelectedIndexChanged(object sender, EventArgs e) { DropDownList x2 = sender as DropDownList; GridViewRow r = x2.Parent.Parent as GridViewRow; if (ViewState["dt"] == null) { Response.Write("Error"); return; } stoveTable = (DataTable)ViewState["dt"]; stoveTable.Rows[r.RowIndex]["steelKind"] = x2.SelectedValue; ViewState["dt"] = stoveTable; this.GridView_list.DataSource = stoveTable; this.GridView_list.DataBind(); } protected void x3_TextChanged(object sender, EventArgs e) { TextBox x3 = sender as TextBox; GridViewRow r = x3.Parent.Parent as GridViewRow; if (ViewState["dt"] == null) { Response.Write("Error"); return; } stoveTable = (DataTable)ViewState["dt"]; stoveTable.Rows[r.RowIndex]["castingTon"] = x3.Text; ViewState["dt"] = stoveTable; this.GridView_list.DataSource = stoveTable; this.GridView_list.DataBind(); } </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <asp:GridView ID="GridView_list" runat="server" ShowFooter="true" AutoGenerateColumns="false" OnRowDataBound="GridView_list_RowDataBound"> <EmptyDataTemplate> <table style="border-collapse: collapse; width: 100%" cellspacing="0" rules="all" border="1"> <tr> <th scope="col"> 选择1 </th> <th scope="col"> 选择2 </th> <th scope="col"> 输入文字 </th> </tr> <tr><td> <asp:DropDownList ID="x1" runat="server"> <asp:ListItem>L0</asp:ListItem> <asp:ListItem>L1</asp:ListItem> <asp:ListItem>L2</asp:ListItem> <asp:ListItem>L3</asp:ListItem> </asp:DropDownList> </td><td> <asp:DropDownList ID="x2" runat="server"> <asp:ListItem>10#</asp:ListItem> <asp:ListItem>20#</asp:ListItem> <asp:ListItem>30#</asp:ListItem> <asp:ListItem>40#</asp:ListItem> </asp:DropDownList> </td><td> <asp:TextBox ID="x3" runat="server"></asp:TextBox> </td></tr> </table> </EmptyDataTemplate> <Columns> <asp:TemplateField HeaderText="选择1"> <ItemTemplate> <asp:DropDownList ID="x1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="x1_SelectedIndexChanged"> <asp:ListItem>L0</asp:ListItem> <asp:ListItem>L1</asp:ListItem> <asp:ListItem>L2</asp:ListItem> <asp:ListItem>L3</asp:ListItem> </asp:DropDownList> </ItemTemplate> <FooterTemplate> <asp:DropDownList ID="x1" runat="server"> <asp:ListItem>L0</asp:ListItem> <asp:ListItem>L1</asp:ListItem> <asp:ListItem>L2</asp:ListItem> <asp:ListItem>L3</asp:ListItem> </asp:DropDownList> </FooterTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="选择2"> <ItemTemplate> <asp:DropDownList ID="x2" runat="server" AutoPostBack="true" OnSelectedIndexChanged="x2_SelectedIndexChanged"> <asp:ListItem>10#</asp:ListItem> <asp:ListItem>20#</asp:ListItem> <asp:ListItem>30#</asp:ListItem> <asp:ListItem>40#</asp:ListItem> </asp:DropDownList> </ItemTemplate> <FooterTemplate> <asp:DropDownList ID="x2" runat="server"> <asp:ListItem>10#</asp:ListItem> <asp:ListItem>20#</asp:ListItem> <asp:ListItem>30#</asp:ListItem> <asp:ListItem>40#</asp:ListItem> </asp:DropDownList> </FooterTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="输入文字"> <ItemTemplate> <asp:TextBox ID="x3" runat="server" AutoPostBack="true" OnTextChanged="x3_TextChanged"></asp:TextBox> </ItemTemplate> <FooterTemplate> <asp:TextBox ID="x3" runat="server"></asp:TextBox> </FooterTemplate> </asp:TemplateField> </Columns> </asp:GridView> <asp:LinkButton ID="LinkButton1" runat="server" Text="添加内容" OnClick="LinkButton1_Click"></asp:LinkButton> <asp:LinkButton ID="LinkButton2" runat="server" Text="删除内容" OnClick="LinkButton2_Click"></asp:LinkButton> </form> </body> </html>
下面采用另外一种方法,
<%@ Page Language="C#" AutoEventWireup="true" EnableViewState="true" %> <%@ Import Namespace="System.Data" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> private DataTable dataTable = null; protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { this.Bind(true); } } private DataTable GetDataTable() { if (ViewState["dt"] == null) { dataTable = new DataTable(); dataTable.Columns.Add("usage", typeof(String)); dataTable.Columns.Add("steelKind", typeof(String)); dataTable.Columns.Add("castingTon", typeof(String)); return dataTable; } else { return ViewState["dt"] as DataTable; } } private void Bind(bool AddBlankRow) { dataTable = GetDataTable(); if (AddBlankRow) dataTable.Rows.Add(dataTable.NewRow()); this.GridView1.DataSource = dataTable; this.GridView1.DataBind(); } protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { DropDownList x1 = e.Row.FindControl("x1") as DropDownList; DropDownList x2 = e.Row.FindControl("x2") as DropDownList; TextBox x3 = e.Row.FindControl("x3") as TextBox; String usage = DataBinder.Eval(e.Row.DataItem, "usage").ToString(); String steelKind = DataBinder.Eval(e.Row.DataItem, "steelKind").ToString(); String castingTon = DataBinder.Eval(e.Row.DataItem, "castingTon").ToString(); x3.Text = castingTon; ListItem xx1 = x1.Items.FindByValue(usage); if (xx1 != null) xx1.Selected = true; ListItem xx2 = x2.Items.FindByValue(steelKind); if (xx2 != null) xx2.Selected = true; } } protected void LinkButton1_Click(object sender, EventArgs e) { //总是取最后的一行 GridViewRow row = GridView1.Rows[GridView1.Rows.Count - 1]; DropDownList x1 = row.FindControl("x1") as DropDownList; DropDownList x2 = row.FindControl("x2") as DropDownList; TextBox x3 = row.FindControl("x3") as TextBox; dataTable = this.GetDataTable(); DataRow newRow = dataTable.NewRow(); if (dataTable.Rows.Count > 0) { newRow = dataTable.Rows[dataTable.Rows.Count - 1]; } newRow["usage"] = x1.SelectedValue; newRow["steelKind"] = x2.SelectedValue; newRow["castingTon"] = x3.Text; if (dataTable.Rows.Count == 0) { dataTable.Rows.Add(newRow); } ViewState["dt"] = dataTable; this.Bind(true); } protected void LinkButton2_Click(object sender, EventArgs e) { dataTable = this.GetDataTable(); if (dataTable.Rows.Count < 1) return; dataTable.Rows.RemoveAt(dataTable.Rows.Count - 1); ViewState["dt"] = dataTable; this.Bind(false); } protected void x1_SelectedIndexChanged(object sender, EventArgs e) { DropDownList x1 = sender as DropDownList; GridViewRow r = x1.Parent.Parent as GridViewRow; dataTable = this.GetDataTable(); dataTable.Rows[r.RowIndex]["usage"] = x1.SelectedValue; ViewState["dt"] = dataTable; this.Bind(false); } protected void x2_SelectedIndexChanged(object sender, EventArgs e) { DropDownList x2 = sender as DropDownList; GridViewRow r = x2.Parent.Parent as GridViewRow; dataTable = this.GetDataTable(); dataTable.Rows[r.RowIndex]["steelKind"] = x2.SelectedValue; ViewState["dt"] = dataTable; this.Bind(false); } protected void x3_TextChanged(object sender, EventArgs e) { TextBox x3 = sender as TextBox; GridViewRow r = x3.Parent.Parent as GridViewRow; dataTable = this.GetDataTable(); dataTable.Rows[r.RowIndex]["castingTon"] = x3.Text; ViewState["dt"] = dataTable; this.Bind(false); } protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { if (e.Row.RowIndex < this.GetDataTable().Rows.Count - 1) { DropDownList x1 = e.Row.FindControl("x1") as DropDownList; DropDownList x2 = e.Row.FindControl("x2") as DropDownList; TextBox x3 = e.Row.FindControl("x3") as TextBox; x1.AutoPostBack = x2.AutoPostBack = x3.AutoPostBack = true; x1.SelectedIndexChanged += new EventHandler(x1_SelectedIndexChanged); x2.SelectedIndexChanged += new EventHandler(x2_SelectedIndexChanged); x3.TextChanged += new EventHandler(x3_TextChanged); } } } </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowDataBound="GridView1_RowDataBound" OnRowCreated="GridView1_RowCreated"> <Columns> <asp:TemplateField HeaderText="选择1"> <ItemTemplate> <asp:DropDownList ID="x1" runat="server"> <asp:ListItem>L0</asp:ListItem> <asp:ListItem>L1</asp:ListItem> <asp:ListItem>L2</asp:ListItem> <asp:ListItem>L3</asp:ListItem> </asp:DropDownList> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="选择2"> <ItemTemplate> <asp:DropDownList ID="x2" runat="server"> <asp:ListItem>10#</asp:ListItem> <asp:ListItem>20#</asp:ListItem> <asp:ListItem>30#</asp:ListItem> <asp:ListItem>40#</asp:ListItem> </asp:DropDownList> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="输入文字"> <ItemTemplate> <asp:TextBox ID="x3" runat="server"></asp:TextBox> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> <asp:LinkButton ID="LinkButton1" runat="server" Text="添加内容" OnClick="LinkButton1_Click"></asp:LinkButton> <asp:LinkButton ID="LinkButton2" runat="server" Text="删除内容" OnClick="LinkButton2_Click"></asp:LinkButton> </form> </body> </html>