如何在回发后访问数据列表中的数据绑定选择项?

时间:2009-10-30 22:19:51

标签: c# .net asp.net datalist

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

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

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

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

4 个答案:

答案 0 :(得分:1)

通过ItemDataBound事件访问时,DataItem属性仅为null。如果需要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);
}

答案 1 :(得分:0)

一些建议here

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

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