我正在制作一个ASP.Net网站。其中一个页面包含我想要显示的用户的GridView。每行代表一个用户。
单击Search
按钮时,我想按名称找到特定的用户行(我已经实现过);然后,我想传递一个数据集,该数据集只包含那一行(然后会更新,并显示在gridView中)。
所以我做了这个:
protected void Search_Click(object
sender, EventArgs e)
{
GridViewRow myRow = findRow(UsersView, userSearched.Text, 0);
if (myRow==null)//Pretty much a must-have since it's QD built.
{
ResponseLabel.ForeColor = System.Drawing.Color.Red;
ResponseLabel.Text = "User not found.";
return;
}
ResponseLabel.ForeColor = System.Drawing.Color.Green;
ResponseLabel.Text = "There you go.";
DataTable container = new DataTable(); // the problem starts here
DataRow convertedForTable = container.NewRow();
for (int i = 0; i < myRow.Cells.Count; i++)
{
convertedForTable.ItemArray[i] = myRow.Cells[i].Text;
}
Cache["Users"] = container;
UpdateSource(); // puts a dataset in the gridView.
}
我在datarow itemArray中得到IndexOutOfBounds
。 - 经过许多不同的尝试,以许多不同的方式做到这一点之后。我想知道如果能有更好的解决方案,我该怎样才能做到这一点,或者我可以做出更好的解决方案。
答案 0 :(得分:1)
您的代码存在一些问题
首先,如果你运行它,你会收到这个错误:
索引超出了数组的范围。
所以你可以通过Cells.Count
创建一个行数组对象,然后将单元格项目文本设置为数组项目,之后你可以将它设置为ItemArray
,如下所示:
DataTable container = new DataTable();
DataRow convertedForTable = container.NewRow();
object[] rowArray = new object[myRow.Cells.Count];
for (int i = 0; i < myRow.Cells.Count; i++)
{
rowArray[i] = myRow.Cells[i].Text;
}
convertedForTable.ItemArray = rowArray;
其次,通过运行上面的代码,您也会收到此错误:
输入数组比此表中的列数长。
您知道为什么,因为container
数据表格单元格的数量必须等于另一个单词中的myRow
单元格containar
没有任何列!
所以我认为myRow
有类似下面代码的列:
DataTable container= new DataTable();
container.Columns.Add(new DataColumn("UserName", typeof(string)));
container.Columns.Add(new DataColumn("Name", typeof(string)));
container.Columns.Add(new DataColumn("Family", typeof(string)));
DataRow convertedForTable = container.NewRow();
object[] rowArray = new object[myRow.Cells.Count];
for (int i = 0; i < myRow.Cells.Count; i++)
rowArray[i] = myRow.Cells[i].Text;
convertedForTable.ItemArray = rowArray;
container.Rows.Add(convertedForTable);
以上代码工作正常, 要解决您的问题,请查看DataRow and ItemArray 此Link和ASP.Net Caching Techniques and Best Practices对于DataTable缓存非常有用。
希望这会有所帮助。