ASP.Net - 从单个网格行构建数据集

时间:2015-03-01 06:44:04

标签: c# asp.net gridview dataset

我正在制作一个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。 - 经过许多不同的尝试,以许多不同的方式做到这一点之后。我想知道如果能有更好的解决方案,我该怎样才能做到这一点,或者我可以做出更好的解决方案。

1 个答案:

答案 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 ItemArrayLinkASP.Net Caching Techniques and Best Practices对于DataTable缓存非常有用。

希望这会有所帮助。