2

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);

これは、ListView に 16 行あるため、16 という数字を出力します。データに正しくアクセスしていないだけだと思います。これについての洞察をいただければ幸いです。

4

3 に答える 3

1

最良の方法は、ブレークポイント(DataRow row =(DataRow)item.DataItem;の行)で停止し、単に何があるかを確認することです。

たとえば、ここのように:http://msdn.microsoft.com/en-us/library/ms173083(v = VS.90).aspx

于 2010-12-17T21:51:13.163 に答える
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
    }
}
于 2010-12-19T01:43:11.183 に答える
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# に習熟していれば誰でも簡単に適応できます (悲しいかな)。

于 2013-05-06T02:34:30.820 に答える