javascript - 绑定(bind) gridview 时在进程中抛出错误?

标签 javascript c# asp.net asp.net-mvc-4

我通过单击按钮将所选数据从一个网格复制到另一个网格。我在我的应用程序中使用 postgre SQl。这是 HTML 的链接。我将数据绑定(bind)为

 NpgsqlDataAdapter adp;
    NpgsqlConnection conn = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["projop"].ConnectionString);
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindPrimaryGrid();
            BindSecondaryGrid();
        }
    }

     private void BindSecondaryGrid()
    {
        DataTable dt = (DataTable)ViewState["SelectedRecords"];
        gvSelected.DataSource = dt;
        gvSelected.DataBind();
    }
    private void BindPrimaryGrid()
    {
        DataTable dt = new DataTable();
        adp = new NpgsqlDataAdapter("select user_id, username,screen_name from users", conn);
        dt = new DataTable("users");
        adp.Fill(dt);
        gvAll.DataSource = dt;
        gvAll.DataBind();

选择数据并单击按钮后

 protected void btnSubmit_Click(object sender, EventArgs e)
    {
        GetData();
        SetData();
        BindSecondaryGrid();
    }
private void GetData()
    {
        DataTable dt;
        if (ViewState["SelectedRecords"] != null)
            dt = (DataTable)ViewState["SelectedRecords"];
        else
            dt = CreateDataTable();
        CheckBox chkAll = (CheckBox)gvAll.HeaderRow
                            .Cells[0].FindControl("chkAll");
        for (int i = 0; i < gvAll.Rows.Count; i++)
        {
            if (chkAll.Checked)
            {
                dt = AddRow(gvAll.Rows[i], dt);
            }
            else
            {
                CheckBox chk = (CheckBox)gvAll.Rows[i]
                                .Cells[0].FindControl("chk");
                if (chk.Checked)
                {
                    dt = AddRow(gvAll.Rows[i], dt);
                }
                else
                {
                    dt = RemoveRow(gvAll.Rows[i], dt);
                }
            }
        }
        ViewState["SelectedRecords"] = dt;
    }

    private void SetData()
    {
        CheckBox chkAll = (CheckBox)gvAll.HeaderRow.Cells[0].FindControl("chkAll");
        chkAll.Checked = true;
        if (ViewState["SelectedRecords"] != null)
        {
            DataTable dt = (DataTable)ViewState["SelectedRecords"];
            for (int i = 0; i < gvAll.Rows.Count; i++)
            {
                CheckBox chk = (CheckBox)gvAll.Rows[i].Cells[0].FindControl("chk");
                if (chk != null)
                {
                    DataRow[] dr = dt.Select("CustomerID = '" + gvAll.Rows[i].Cells[1].Text + "'");
                    chk.Checked = dr.Length > 0;
                    if (!chk.Checked)
                    {
                        chkAll.Checked = false;
                    }
                }
            }
        }
    }

这里在函数 btnSubmit_Click 中绑定(bind)数据通过BindSecondaryGrid()gvSelected.DataBind(); 上显示错误在功能BindSecondaryGrid() .

错误:DataBinding: 'HttpException - System.Data.DataRowView' does not contain a property with the name 'user_id'.

编辑:添加和删除代码

  private DataTable AddRow(GridViewRow gvRow, DataTable dt)
    {
        DataRow[] dr = dt.Select("CustomerID = '" + gvRow.Cells[1].Text + "'");
        if (dr.Length <= 0)
        {
            dt.Rows.Add();
            dt.Rows[dt.Rows.Count - 1]["CustomerID"] = gvRow.Cells[1].Text;
            dt.Rows[dt.Rows.Count - 1]["ContactName"] = gvRow.Cells[2].Text;
            dt.Rows[dt.Rows.Count - 1]["Complete Name"] = gvRow.Cells[3].Text;
            dt.AcceptChanges();
        }
        return dt;
    }

    private DataTable RemoveRow(GridViewRow gvRow, DataTable dt)
    {
        DataRow[] dr = dt.Select("CustomerID = '" + gvRow.Cells[1].Text + "'");
        if (dr.Length > 0)
        {
            dt.Rows.Remove(dr[0]);
            dt.AcceptChanges();
        }
        return dt;
    }

最佳答案

这是因为您在 GridView 中指定的 DataField 不正确。让我们试试这个。

<asp:BoundField DataField = "CustomerID" HeaderText = "Customer ID" 
 HtmlEncode = "false" />
<asp:BoundField DataField = "ContactName" HeaderText = "Contact Name" 
HtmlEncode = "false" />
<asp:BoundField DataField = "CompleteName" HeaderText = "Complete Name" 
HtmlEncode = "false" />

请注意,指定的 DataField 必须与 DataRow 的名称匹配。

我假设您的数据表具有用 ** 突出显示的列:

dt.Rows[dt.Rows.Count - 1]["**CustomerID**"] = gvRow.Cells[1].Text;
dt.Rows[dt.Rows.Count - 1]["**ContactName**"] = gvRow.Cells[2].Text;
dt.Rows[dt.Rows.Count - 1]["**CompleteName**"] = gvRow.Cells[3].Text;

请告诉我这是否解决了这个问题。谢谢

关于javascript - 绑定(bind) gridview 时在进程中抛出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26114732/

相关文章:

asp.net - 将 JSON 传递给 MVC 3 操作

javascript - NodeJS promise 不重置

c# - 客户端脚本.RegisterStartupScript()

javascript - 使用带有 jquery 3.1.1 的 stellar.js 未捕获的 TypeError

c# - ASP.net 表单例份验证 - 保护对我不起作用

c# - 搜索列表 FirstOrDefault StartsWith fuzzy

c# - 将用户重定向到 Paypal 站点以及来自代码隐藏的编程数据

c# - 如何在 Active Directory 中获取用户的组? (c#, asp.net)

javascript - 语音识别API

javascript - 如何将 javascript 嵌入到远程加载 Bootstrap 模式中