c# - 在网格行中查找控件

标签 c# asp.net view grid

我正在使用父子网格,在子网格上我正在执行显示/隐藏抛出 java 脚本。和子网格我将运行时间与 Templatecolumns 绑定(bind)在一起,例如

GridView NewDg = new GridView();
NewDg.ID = "dgdStoreWiseMenuStock";

TemplateField TOTAL = new TemplateField();
TOTAL.HeaderTemplate = new BusinessLogic.GridViewTemplateTextBox(ListItemType.Header, "TOTAL",e.Row.RowIndex );
TOTAL.HeaderStyle.Width = Unit.Percentage(5.00);
TOTAL.ItemTemplate = new BusinessLogic.GridViewTemplateTextBox(ListItemType.Item, "TOTAL", e.Row.RowIndex);
NewDg.Columns.Add(TOTAL);

NewDg.DataSource = ds;
NewDg.DataBind();


NewDg.Columns[1].Visible = false;
NewDg.Columns[2].Visible = false;

System.IO.StringWriter sw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw);
NewDg.RenderControl(htw);

现在我在 Grid 中有一个名为“TOTAL”的文本框,我想找到这个文本框并获得它的值。

如何获取?

最佳答案

您可以使用 Controls 属性或 FindControl(string id) 方法在 GridView 的相应单元格中获取 TextBox 控件:

TextBox txtTotal = gv.Rows[index].cells[0].Controls[0] as TextBox;

TextBox txtTotal = gv.Rows[index].cells[0].Controls[0].FindControl("TOTAL") as TextBox;

第一行的索引可以是 0,或者是 for 循环中的迭代器。

或者,您可以对 GridView 的行使用 foreach 循环:

foreach(GridViewRow row in gv.Rows)
{
    TextBox txtTotal = row.cells[0].Controls[0].FindControl("TOTAL") as TextBox;
    string value = txtTotal.Text;

    // Do something with the textBox's value
}

此外,您必须记住,如果您动态创建 GridView(而不是在 Web 表单中以声明方式创建),您将无法在页面回发后获得此控件。

关于这个主题有一篇很棒的 4 Guys from Rolla 文章:Dynamic Web Controls, Postbacks, and View State

关于c# - 在网格行中查找控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1965835/

相关文章:

c# - AssemblyResolve 未针对依赖项触发

c# - ASp.net 身份 MVC5 中的登录尝试

c# - 拼写检查器有什么用?谷歌拼写检查器或 Hunspell

android - Xamarin 安卓 : How do i open add header and send post request in webview

c# - 为什么我会收到此语法错误

c# - 不是每一个 IProgress<int> 的结果都从任务中出来

c# - 我如何播放音频并匹配文本框中的所有文本

c# - 高效的批量数据插入

android - 为什么在尝试为按钮调用方法时程序崩溃?

php - mysql 查询需要很长时间