gpt4 book ai didi

c# - ListView DataItem 显示 Null

转载 作者:IT王子 更新时间:2023-10-29 04:44:05 24 4
gpt4 key购买 nike

几天前,我wrote about issues在 ASP.NET 中实现 ListView。现在,在编写了所有其他代码后,我无法在 ListView 中保存更改的项目。

一些注意事项:

  • “保存”按钮不是 ListView 本身的一部分;它调用 GetListViewItems()方法,依次调用 Save()方法。
  • Listview.DataBind()当按下请求更新记录的按钮时调用事件
  • Listview 使用 <%#Eval("Key.Name") %> 显示文本和一个 named DropDownList 使用 <%#Eval("Value") %>

从 ListView 中获取项目

public void GetListViewItems()
{
List<Foo> Result = FooManager.CreateFooList();
DropDownList ddl = null;
ListViewItem Item = null;
try
{
foreach (ListViewDataItem item in lvFooList.Items)
{
Item = item;
ddl = ((DropDownList) (Item.FindControl("ddlListOfBars")));
if (//something is there)
{
Foo foo = FooManager.CreateFoo();
foo.Id = item.DataItemIndex; //shows null
int barId = int.Parse(ddl.SelectedItem.Value); //works just fine
foo.barId = barId;
Result.Add(foo);
}
}
}
catch (Exception ex)
{
//Irrelevant for our purposes
}
}

数据绑定(bind)ListView

数据绑定(bind) ListView 的代码是 shown here in my previous question .

问题:

  1. 为什么当我遍历 ListViewDataItem 时在Listview每一项都是 null
  2. 如何检索 Foo.Id来自字典?
  3. 我可能还缺少什么?
  4. 如果我想得到那个 Id 我会用什么以编程方式基于显示的项目?就像现在一样,当前的 ListView 是根据 Foo 显示的。 s 被选中。那些Foo然后显示所选的 s,用户可以更改 BarDropDownList ,点击保存,然后传播这些更改。

更新

事实证明,我的问题是什么leppie曾说过;那就是我需要指定 DataKeyNames并使用它们来保留 ListView 中的信息。

这是我添加的代码:

try
{
int DataKeyArrayIndex = 0;
foreach (ListViewDataItem item in lvFooList.Items)
{
Item = item;
ddl = ((DropDownList) (Item.FindControl("ddlListOfBars")));
if (//something is there)
{
Foo foo = FooManager.CreateFoo();
Foo tempFoo = FooManager.CreateFoo();
if (lvFooList != null)
{
tempFoo = ((Foo)(lvFooList.DataKeys[DataKeyArrayIndex].Value));
}

foo.Id = tempFoo.Id;
int barId = int.Parse(ddl.SelectedItem.Value); //works just fine
foo.barId = barId;
Result.Add(foo);
DataKeyArrayIndex++;
}
}
}

然后在 .ascx文件,我添加了DataKeyNames="Key" ,像这样:

<asp:ListView ID="lvFooList" runat="server" DataKeyNames="Key">

这让我可以使用 Key from my previous post以确定正在查看哪个 Foo。

非常感谢对这种方法的任何批评,以及改进它的方法。

最佳答案

一些快速的回答:

  1. 您需要使用数据绑定(bind)才能工作,换句话说,分配给 DataSource 并调用 DataBind()。编辑:看来你正在这样做。但请记住,它不会在回发之间持续存在,只是 DataKey(见下文)。

  2. 如果我没记错的话,您需要指定 DataKeyNames,然后可以从 DataKey 属性中检索它们。

关于c# - ListView DataItem 显示 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/609276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com