迭代ListView数据

时间:2010-12-17 21:13:09

标签: c# listview datatable datarow

我有一个绑定到DataTable的ListView。我想迭代DataTable的行并访问他们的数据。我想,要做到这一点,我会简单地迭代ListView中的ListViewDataItems。为了测试我正在正确访问数据,我尝试了以下代码,它应该只在每行的第0列打印字符串。

for (int i = 0; i < MyListView.Items.Count; i++)
{
    ListViewDataItem item = MyListView.Items[i];
    DataRow row = (DataRow) item.DataItem;
    Response.Write(row[0]);
}

但是,没有打印任何内容。要验证ListView不是空的(它不应该是因为数据在我的aspx页面上正确呈现),我试过这个:

Response.Write(MyListView.Items.Count);

这会输出数字16,这是正确的,因为我的ListView中有16行。我猜我只是没有正确访问数据。我很欣赏这方面的一些见解。

3 个答案:

答案 0 :(得分:1)

最好的方法是在断点处停止(在行DataRow row =(DataRow)item.DataItem;)并简单地检查你有什么。

例如像这里:http://msdn.microsoft.com/en-us/library/ms173083(v = VS.90).aspx

答案 1 :(得分:1)

我认为最好的解决方案是直接在DataTable而不是ListViewDataItems中迭代数据。

for (int i = 0; i < myTable.Rows.Count; i++)
{
    for (int j = 0; j < myTable.Columns.Count; j++)
    {
        object data = data.Rows[i][j];
        // do stuff with data
    }
}

答案 2 :(得分:0)

对于仍在寻求这个问题的正确答案的人,以下代码将起作用(VB.NET):

Dim di as ListViewDataItem

For Each di in MyListView.Items
    Response.Write(CType(di.FindControl("ExampleLabel"), Label).Text)
Next

只需将Response.Write行替换为您想要对每个列表项执行的操作。示例行正在查找名为“ExampleLabel”的控件,将其强制转换为标签,然后将文本值写入页面。

对于任何熟练的人(不是我的唉),很容易适应C#。