一个itemtemplate中的多个控件

编程入门 行业动态 更新时间:2024-10-26 08:32:50
一个itemtemplate中的多个控件 - GridView(Multiple controls in one itemtemplate - GridView)

我在Web应用程序中有一个gridview,它在页面加载事件的每一列中显示文本框。 现在我想要做的是在这个itemtemplate中添加另一个标签控件。 显示当我在文本框中键入内容并单击“保存”时,我可以向我的数据库显示标签而不是文本框。 我得到了保存部分工作正常,但不知道如何显示我在标签中输入的文本。 我现在拥有的是在点击保存按钮后,文本框保留在gridview中并且标签不显示。 知道如何解决这个问题吗?

<asp:GridView ID='gvMain' ruant="server"> <Columns> <asp:TemplateField HeaderText ="LastName"> <ItemTemplate> <asp:TextBox ID="txtFName" runat="server"/> <asp:Label ID="lblFName" ruant="server" /> </Columns> </asp:GridView>

请参阅此链接以供参考。

http://www.aspsnippets.com/Articles/Adding-Dynamic-Rows-in-ASP.Net-GridView-Control-with-TextBoxes.aspx

I have a gridview in web application which show textboxes in each columns in page load event. Now what I want to do is to add another label control in this itemtemplate. Show that when I type something in the textbox and click save, I can show the label instead of the textbox to my database. I got the saving part work fine but not sure how to show the text I typed in a label. What I have right now is after I clicked the save button, the textbox stay in the gridview and label not show up. Any idea how to fix this?

<asp:GridView ID='gvMain' ruant="server"> <Columns> <asp:TemplateField HeaderText ="LastName"> <ItemTemplate> <asp:TextBox ID="txtFName" runat="server"/> <asp:Label ID="lblFName" ruant="server" /> </Columns> </asp:GridView>

Please see this link for reference.

http://www.aspsnippets.com/Articles/Adding-Dynamic-Rows-in-ASP.Net-GridView-Control-with-TextBoxes.aspx

最满意答案

我会将两个控件添加到单元格项目模板中,并根据我是保存行还是添加新行来隐藏/显示它们。 所以,我的代码如下:

标记:

<form id="form1" runat="server"> <div> <asp:GridView ID="Gridview1" runat="server" ShowFooter="true" AutoGenerateColumns="false"> <Columns> <asp:BoundField DataField="RowNumber" HeaderText="Row Number" /> <asp:TemplateField HeaderText="Header 1"> <ItemTemplate> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:Label ID="Label1" runat="server" Text='<%# Eval("Column1") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Header 2"> <ItemTemplate> <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> <asp:Label ID="Label2" runat="server" Text='<%# Eval("Column2") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Header 3"> <ItemTemplate> <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox> <asp:Label ID="Label3" runat="server" Text='<%# Eval("Column3") %>'></asp:Label> </ItemTemplate> <FooterStyle HorizontalAlign="Right" /> <FooterTemplate> <asp:Button ID="ButtonAdd" runat="server" Text="Add New Row" OnClick="ButtonAdd_Click" /> <asp:Button ID="ButtonSave" runat="server" Text="Save" OnClick="ButtonSave_Click" /> </FooterTemplate> </asp:TemplateField> </Columns> </asp:GridView> </div> </form>

代码隐藏:

private void SetInitialRow() { DataTable dt = new DataTable(); DataRow dr = null; dt.Columns.Add(new DataColumn("RowNumber", typeof(string))); dt.Columns.Add(new DataColumn("Column1", typeof(string))); dt.Columns.Add(new DataColumn("Column2", typeof(string))); dt.Columns.Add(new DataColumn("Column3", typeof(string))); dr = dt.NewRow(); dr["RowNumber"] = 1; dr["Column1"] = string.Empty; dr["Column2"] = string.Empty; dr["Column3"] = string.Empty; dt.Rows.Add(dr); Table = dt; BindGrid(); SwitchMode(false); } private void AddNewRowToGrid() { if(Table != null) { DataRow row = Table.NewRow(); Table.Rows.Add(row); BindGrid(); SwitchMode(false); } else { Response.Write("ViewState is null"); } } private void SaveRow() { if(Table != null) { int rowIndex = Table.Rows.Count - 1; TextBox box1 = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("TextBox1"); TextBox box2 = (TextBox)Gridview1.Rows[rowIndex].Cells[2].FindControl("TextBox2"); TextBox box3 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("TextBox3"); Table.Rows[rowIndex]["Column1"] = box1.Text; Table.Rows[rowIndex]["Column2"] = box2.Text; Table.Rows[rowIndex]["Column3"] = box3.Text; BindGrid(); SwitchMode(true); } else { Response.Write("ViewState is null"); } } private void SwitchMode(bool add) { Button saveBtn = (Button)Gridview1.FooterRow.Cells[3].FindControl("ButtonSave"); saveBtn.Visible = !add; Button addBtn = (Button)Gridview1.FooterRow.Cells[3].FindControl("ButtonAdd"); addBtn.Visible = add; SwitchControl(add); } private void SwitchControl(bool add) { for(int i = 0; i < Table.Rows.Count; i++) { bool txtVisible = false; if (i == Table.Rows.Count - 1) { txtVisible = !add; } TextBox box1 = (TextBox)Gridview1.Rows[i].Cells[1].FindControl("TextBox1"); box1.Visible = txtVisible; TextBox box2 = (TextBox)Gridview1.Rows[i].Cells[2].FindControl("TextBox2"); box2.Visible = txtVisible; TextBox box3 = (TextBox)Gridview1.Rows[i].Cells[3].FindControl("TextBox3"); box3.Visible = txtVisible; Label label1 = (Label)Gridview1.Rows[i].Cells[1].FindControl("Label1"); label1.Visible = !txtVisible; Label label2 = (Label)Gridview1.Rows[i].Cells[2].FindControl("Label2"); label2.Visible = !txtVisible; Label label3 = (Label)Gridview1.Rows[i].Cells[3].FindControl("Label3"); label3.Visible = !txtVisible; } } private DataTable Table { get { return ViewState["CurrentTable"] as DataTable; } set { ViewState["CurrentTable"] = value; } } private void BindGrid() { Gridview1.DataSource = Table; Gridview1.DataBind(); } protected void Page_Load(object sender, EventArgs e) { if(!Page.IsPostBack) { SetInitialRow(); } } protected void ButtonAdd_Click(object sender, EventArgs e) { AddNewRowToGrid(); } protected void ButtonSave_Click(object sender, EventArgs e) { SaveRow(); }

所以,首先我看到Grid有一行,我可以通过TextBoxes用数据填充它,然后点击Save。 然后,TextBoxes变为Labels,Add New Row可见。 如果单击它,将出现带有TextBoxes的新行。

I would add both controls to a cell item template and hide/show them based on if I save a row or add a new one. So, my code would be like the following:

Markup:

<form id="form1" runat="server"> <div> <asp:GridView ID="Gridview1" runat="server" ShowFooter="true" AutoGenerateColumns="false"> <Columns> <asp:BoundField DataField="RowNumber" HeaderText="Row Number" /> <asp:TemplateField HeaderText="Header 1"> <ItemTemplate> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:Label ID="Label1" runat="server" Text='<%# Eval("Column1") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Header 2"> <ItemTemplate> <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> <asp:Label ID="Label2" runat="server" Text='<%# Eval("Column2") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Header 3"> <ItemTemplate> <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox> <asp:Label ID="Label3" runat="server" Text='<%# Eval("Column3") %>'></asp:Label> </ItemTemplate> <FooterStyle HorizontalAlign="Right" /> <FooterTemplate> <asp:Button ID="ButtonAdd" runat="server" Text="Add New Row" OnClick="ButtonAdd_Click" /> <asp:Button ID="ButtonSave" runat="server" Text="Save" OnClick="ButtonSave_Click" /> </FooterTemplate> </asp:TemplateField> </Columns> </asp:GridView> </div> </form>

Code-behind:

private void SetInitialRow() { DataTable dt = new DataTable(); DataRow dr = null; dt.Columns.Add(new DataColumn("RowNumber", typeof(string))); dt.Columns.Add(new DataColumn("Column1", typeof(string))); dt.Columns.Add(new DataColumn("Column2", typeof(string))); dt.Columns.Add(new DataColumn("Column3", typeof(string))); dr = dt.NewRow(); dr["RowNumber"] = 1; dr["Column1"] = string.Empty; dr["Column2"] = string.Empty; dr["Column3"] = string.Empty; dt.Rows.Add(dr); Table = dt; BindGrid(); SwitchMode(false); } private void AddNewRowToGrid() { if(Table != null) { DataRow row = Table.NewRow(); Table.Rows.Add(row); BindGrid(); SwitchMode(false); } else { Response.Write("ViewState is null"); } } private void SaveRow() { if(Table != null) { int rowIndex = Table.Rows.Count - 1; TextBox box1 = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("TextBox1"); TextBox box2 = (TextBox)Gridview1.Rows[rowIndex].Cells[2].FindControl("TextBox2"); TextBox box3 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("TextBox3"); Table.Rows[rowIndex]["Column1"] = box1.Text; Table.Rows[rowIndex]["Column2"] = box2.Text; Table.Rows[rowIndex]["Column3"] = box3.Text; BindGrid(); SwitchMode(true); } else { Response.Write("ViewState is null"); } } private void SwitchMode(bool add) { Button saveBtn = (Button)Gridview1.FooterRow.Cells[3].FindControl("ButtonSave"); saveBtn.Visible = !add; Button addBtn = (Button)Gridview1.FooterRow.Cells[3].FindControl("ButtonAdd"); addBtn.Visible = add; SwitchControl(add); } private void SwitchControl(bool add) { for(int i = 0; i < Table.Rows.Count; i++) { bool txtVisible = false; if (i == Table.Rows.Count - 1) { txtVisible = !add; } TextBox box1 = (TextBox)Gridview1.Rows[i].Cells[1].FindControl("TextBox1"); box1.Visible = txtVisible; TextBox box2 = (TextBox)Gridview1.Rows[i].Cells[2].FindControl("TextBox2"); box2.Visible = txtVisible; TextBox box3 = (TextBox)Gridview1.Rows[i].Cells[3].FindControl("TextBox3"); box3.Visible = txtVisible; Label label1 = (Label)Gridview1.Rows[i].Cells[1].FindControl("Label1"); label1.Visible = !txtVisible; Label label2 = (Label)Gridview1.Rows[i].Cells[2].FindControl("Label2"); label2.Visible = !txtVisible; Label label3 = (Label)Gridview1.Rows[i].Cells[3].FindControl("Label3"); label3.Visible = !txtVisible; } } private DataTable Table { get { return ViewState["CurrentTable"] as DataTable; } set { ViewState["CurrentTable"] = value; } } private void BindGrid() { Gridview1.DataSource = Table; Gridview1.DataBind(); } protected void Page_Load(object sender, EventArgs e) { if(!Page.IsPostBack) { SetInitialRow(); } } protected void ButtonAdd_Click(object sender, EventArgs e) { AddNewRowToGrid(); } protected void ButtonSave_Click(object sender, EventArgs e) { SaveRow(); }

So, first I see the Grid with one row and I can populate it with data via TextBoxes and click Save. Then, TextBoxes become Labels and Add New Row is visible. If I click it, a new row with TextBoxes appears.

更多推荐

gridview,显示,label,电脑培训,计算机培训,IT培训"/> <meta name="description

本文发布于:2023-07-09 14:55:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1087144.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:多个   控件   itemtemplate

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!