在我的win表单应用程序中,我有2个listViews:listView1和listView2
listView1具有用户选择的数据库表(一个或多个)
按下按钮时,listView2显示与所选表格相关的所有列
当我从listView1中选择2个表时,嵌套循环运行超出绑定,即使它显示1个表的所有列,但由于它超出绑定,它不会获得所选第二个表的列。你能告诉我我哪里错了吗?
这是我的代码:
conn.Open();
SqlCommand sc2 = new SqlCommand("select C_Name, T from (select CONCAT(Table_Schema,'.',Table_Name) T, Concat(Table_Name,'.',Column_Name) C_Name from Information_Schema.columns) as Teo ;", conn);
SqlDataAdapter sda2 = new SqlDataAdapter(sc2);
sda2.Fill(dt);
conn.Close();
DataRow[] foundrows;
string express;
for (int i = 0; i < listView1.CheckedItems.Count; i++)
{
MessageBox.Show(listView1.CheckedItems.Count.ToString());
express="T ='" + listView1.CheckedItems[i].Text+"'";
foundrows = dt.Select(express);
MessageBox.Show(foundrows.Length.ToString());
for (int p = 0; p < foundrows.Length; i++)
{
listView2.Items.Add(foundrows[i][1].ToString());
}
}
答案 0 :(得分:3)
您需要更改第二个循环中递增的内容和用于索引的内容:
foundrows = dt.Select(express);
MessageBox.Show(foundrows.Length.ToString());
for (int p = 0; p < foundrows.Length; p++)
{
listView2.Items.Add(foundrows[p][1].ToString());
}
第二个循环中的i ++将使您的索引增加到i 在findrows.Length!= listView1.CheckedItems.Count中使用i作为第二个循环中的索引将导致越界异常,并且可能不是你想要的
答案 1 :(得分:1)
for (int p = 0; p < foundrows.Length; i++)
{
listView2.Items.Add(foundrows[i][1].ToString());
}
应该是
for (int p = 0; p < foundrows.Length; p++)
{
listView2.Items.Add(foundrows[p][1].ToString());
}
答案 2 :(得分:1)
它已超出界限,因为你有:
for (int p = 0; p < foundrows.Length; i++)
{
listView2.Items.Add(foundrows[i][1].ToString());
}
它应该是:
for (int p = 0; p < foundrows.Length; p++)
{
listView2.Items.Add(foundrows[p][1].ToString());
}
答案 3 :(得分:0)
您确定,第二个表有两列吗?
因为,你正在做listView2.Items.Add(foundrows[i][1].ToString());
foundrows[rowindex][cellindex]
可以在第二个表中找到吗?
答案 4 :(得分:0)
不应该是&#34; p&#34;而不是&#34;我&#34;在第二个循环?
for (int p = 0; p < foundrows.Length; p++)
{
listView2.Items.Add(foundrows[p][1].ToString());
}