【问题标题】:Accessing data from dynamic control in gridview从gridview中的动态控件访问数据
【发布时间】:2013-08-20 07:14:15
【问题描述】:

Grid_RowDataBound 上,我在当前行的第 8 个单元格中添加了一个表格。这张表是这样的:

<table rules="all" border="0" style="width:100%;">
    <tbody>
        <tr>
            <td align="center"><input name="studentgrd$ctl03$ID2VAL4" type="text" value="6" maxlength="2" id="studentgrd_ctl03_ID2VAL4" style="width:20px;"></td>
        </tr>
    </tbody>
</table>

点击保存按钮时,我尝试使用以下方法获取数据:

TextBox tb = (TextBox)studentgrd.FindControl("ID2VAL4");
TextBox tb = (TextBox)studentgrd.Rows[i].Cells[8].FindControl("ID2VAL4");//When looping through all rows

但是文本框是空的。那么回发时动态控件会丢失吗?如果是,那么如何保留它?如果不是,我哪里错了?

【问题讨论】:

  • 是动态控制值在回发时丢失。要获取值添加隐藏字段,然后在文本框的 lostfocus 事件上使用 javascript 将文本框的值放入隐藏字段中。
  • 该单元格中文本框的动态数量如何决定隐藏字段的数量。

标签: asp.net gridview dynamic-data


【解决方案1】:

您可以在按钮单击方法中分配这样的 GridviewRow:

GridViewRow gridViewRow = (GridViewRow)(((Control)sender).NamingContainer);

分配值时,您应该将其更改为:

TextBox tb = ((TextBox)gridViewRow .FindControl("ID2VAL4"));

其中gridViewRowGridViewRow,而不是GridView 本身。

【讨论】:

  • 但是 Grid_RowDataBound 不会在回发时调用,并且按钮也不在网格中。我在回发时禁用了网格数据绑定,当所有语句在 button_Click 中完成时,最后一行是 studentgrd.DataBind();以反映变化。
  • 我改变了答案。上面的代码只会出现在事件方法中,不会出现在 DataRowBound 中。
  • 无法将“ASP.secure_studentgrade_aspx”类型的对象转换为“System.Web.UI.WebControls.GridViewRow”类型。 ://
【解决方案2】:

我解决了我的问题:如果它是一个动态生成的控件,并且绑定到第一次加载的数据源,那么在回发时你必须再次生成相同的控件并绑定它,然后尝试访问它们。

即使动态控件被创建并绑定到数据源,它也将具有用户给出的更改值(这让我感到惊讶,我认为是因为动态控件的视图状态。如果错了,请纠正我)。

【讨论】:

    猜你喜欢
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    相关资源
    最近更新 更多