【问题标题】:How to access the databound selected item in a datalist after postback?回发后如何访问数据列表中的数据绑定选定项?
【发布时间】:2009-10-30 22:19:50
【问题描述】:

回发后如何访问数据绑定项?

我有一个数据列表,当用户选择一个项目时,OnItemCommand 事件触发,我的事件处理程序看起来像这样:

protected void dlResults_Select(object sender, DataListCommandEventArgs e)
{
  MyItem item = e.Item.DataItem as MyItem;
}

item 始终为空。有没有办法访问数据绑定项?

【问题讨论】:

  • 你必须重新绑定控件。 ViewState 不会持久化您的数据绑定项。

标签: c# .net asp.net datalist


【解决方案1】:

DataItem 属性仅在通过 ItemDataBound 事件访问时不为空。如果您需要一个 ID 来修改您的对象/记录,您可以设置 DataList 的 DataKeyField 属性来填充 DataKeys 集合。

<asp:DataList ID="DataList1" runat="server" DataKeyField="id">
</asp:DataList>

然后您可以在 OnItemCommand 事件中使用 id 来实例化所需的对象,或作为数据库查询的参数。

protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
{
    int id = Convert.ToInt32(DataList1.DataKeys[e.Item.ItemIndex]);
    MyItem item = new MyItem(id);
}

【讨论】:

    【解决方案2】:

    一些建议here

    【讨论】:

      【解决方案3】:

      我发现解决此类问题的最简单方法是向控件添加一个 javascript 事件,该事件使用控件的选定值更新输入控件(type=hidden)。如果您将 runat=server 属性添加到标签,您可以访问输入控制服务器端并从中读取值。回发应该在 javascript 事件之后触发,因此其他一切都应该为您“正常”工作。

      【讨论】:

        【解决方案4】:

        只有在了解您进行数据绑定的方式后,才能为您的问题提供适当的答案。您是通过调用数据列表的 .DataBind() 方法从代码中进行数据绑定,还是向数据列表提供数据源以进行绑定。我问这个问题的原因是,如果您从代码中使用数据列表的 .DataBind() 方法来绑定数据列表,则必须在每次回发时调用它,以确保数据列表再次获得数据绑定。否则,在回帖后,您将看到数据列表显示为空。如果您使用其 DataSource 或 DataSourceId 属性为要绑定的数据列表提供数据源,则每次回发时数据列表的数据绑定由框架处理,您不必担心这一点。

        但从外观上看,我认为您将值设为 null 是因为您试图在错误的位置获取 DataItem 的值。请记住,您必须遵循控件的正确生命周期才能使其以您希望的方式为您工作。

        如果您能回答我上面的问题,我可以提供更好的答案。您当前的陈述似乎不足以提供相关答案。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-01-26
          • 2023-03-18
          • 2020-07-11
          • 1970-01-01
          • 2012-02-25
          • 2014-01-10
          相关资源
          最近更新 更多