1

我有一个 Gridview,它通过以下方式获取数据:

internal void updateGrid()
{
    List<String> data = dt.getAlldata(UserID(), ListID());
    gridViewer.DataSource = data;
    gridViewer.DataBind();
}

单击按钮后,数据库将更新并显示新数据。一切正常。

现在我必须用用户控件替换字符串:

internal void updateGrid()
{
    List<String> data = dt.getAlldata(UserID(), ListID());
    gridViewer.DataSource = data;
    gridViewer.DataBind();

    for (int i = 0; i < gridViewer..Rows.Count; i++)
    {
        UCControl dum = (UCControl)LoadControl("~/UCControl.ascx");
        dum.SetData(gridViewer.Rows[i].Cells[0].Text, false);
        gridViewer.Rows[i].Cells[0].Controls.Clear();
        gridViewer.Rows[i].Cells[0].Controls.Add(dum);
    }
}

在第一个 Page_Load() 之后,一切都正确显示。但是当我单击我的按钮时,用户控件不会重新绘制。内部数据设置正确,但不会更新。

因为此控件通过客户端上的 UserInputs 上的 javascript 做出反应,所以每个 Usercontrol 都有自己的 Id,由

this.ID = "UCControl" + data[0];

data[0] 是唯一的,但在整个过程中都是已知的。

有人能告诉我为什么 UserControl 不重绘吗?或者更好:我如何告诉用户控件更新?

4

1 回答 1

0

从您的代码中,我会说一旦绑定了数据,您就不能立即进入并开始更改它。您需要挂钩数据绑定事件之一。

如果您使用的是列表 viem ItemDataBound将是一个很好的选择。但是 GridView 有一组更有限的事件并且不提供那种级别的控制 - 所以你有点卡在那个分数上。

根据我在 asp.net ( LoadControl) 中使用动态控件的经验,这有点令人担忧。我认为更好的选择是在您的用户控件中公开公开一个属性并绑定到该属性。

这个问题很好地描述了如何实现这一目标

asp.net 用户控件绑定在 gridview 中

希望有帮助

于 2013-06-10T13:45:24.573 回答