ASP.Net 数据源导航



我一直在寻找一段时间,但没有找到合适的解决方案;我正在尝试搜索数据集(它是gridView的来源),该数据集由 ASP.Net 页面中的用户名和详细信息组成。

如果用户想要查找特定行,则需要插入用户名,然后按按钮。然后,我想更改保存在缓存中的数据集 - 我希望它包含用户正在搜索的特定行。

但是,当我更改数据集(将其设置为仅包含一行)时,出现以下错误:

在所选数据源上找不到名称为"用户名"的字段或属性。

我做错了什么吗?

代码如下:

protected void Search_Click(object 
        sender, EventArgs e)
    {
        DataRow myRow = findRow(((DataSet)Cache["Users"]).Tables[0], userSearched.Text);
        if (myRow == null)
        {
            ResponseLabel.ForeColor = System.Drawing.Color.Red;
            ResponseLabel.Text = "User not found.";
            return;
        }
        ResponseLabel.ForeColor = System.Drawing.Color.Green;
        ResponseLabel.Text = "There you go.";
        DataSet newDs = new DataSet();
        DataTable newDt = new DataTable();
        newDt.ImportRow(myRow);
        newDs.Tables.Add(newDt);
        Cache["Users"] = newDs;
        UpdateSource(); // Updating the source after each iteration
        }

findrow()

private DataRow findRow(DataTable View, string searchValue, int index = 0)
    {
        foreach (DataRow row in View.Rows)
        {
            if (row.ItemArray[index].Equals(searchValue))
            {
                return row;
            }
        }
        return null;
    }

网格视图中的相关部分:

<Columns>
        <asp:BoundField DataField="Username" HeaderText="Username" 
            SortExpression="Username" />
        <asp:BoundField DataField="TimeJoined" HeaderText="Joined" 
            SortExpression="TimeJoined" />
        <asp:BoundField DataField="Email" HeaderText="Email" SortExpression="Email" />
        <asp:CheckBoxField DataField="Banned" HeaderText="Banned" 
            SortExpression="Banned" />
        <asp:CheckBoxField DataField="Admin" HeaderText="Admin" 
            SortExpression="Admin" />
        <asp:CommandField HeaderText="Options" ShowEditButton="True" 
            ShowHeader="True" />
    </Columns>

页面加载:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            if (Cache["Users"] == null)
            {
                UsersView.DataSource = DbManager.getUsersView(); // database stuff. It worked pretty well before.
                Cache["Users"] = UsersView.DataSource;
            }
            else
            {
                UsersView.DataSource = (DataSet)Cache["Users"];
            }
            UsersView.DataBind(); // I get the error here.
        }
    }

如果您需要其他任何东西,请告诉我。提前感谢!

我相信

当您在 Search_Click 中重新创建 DataTable 架构时,您会丢失它,请尝试显式声明列名。

顺便说一句,您是否尝试过数据表选择方法(https://msdn.microsoft.com/en-us/library/y06xa2h1.aspx)或数据视图(https://msdn.microsoft.com/en-us/library/bb669073%28v=vs.110%29.aspx)?

相关内容

  • 没有找到相关文章

最新更新