无法将所有选定的行添加到数据集中

时间:2018-03-21 11:37:01

标签: asp.net datatable dataset

我已在下面显示的checkbox中添加了所选记录(datatable),记录显示在使用datagrid填充的stored procedure中。然后在button clicksave将所有选定(已添加)的记录添加到ds中的database

public DataSet getMain()
    {
        DataSet ds = CFObj.GetSchemaRequest();
        DataRow dr;
        dr = ds.Tables[0].NewRow();
        for (int i = 0; i < dgAvailableCandidates.Items.Count; i++)
        {
            CheckBox saveChkBoxItem = (CheckBox)dgAvailableCandidates.Items[i].FindControl("chkbox_SelectCandidate");
            if (saveChkBoxItem.Checked)
            {
                //ds.Tables[0].Columns["pk_scrndRecId"].ReadOnly = false;
                dr["pk_scrndRecId"] = "0";
                dr["fk_jobId"] = ddl_jobList.SelectedValue.ToString();
                obj._fkjob_Id = ddl_jobList.SelectedValue.ToString();
                dr["fk_recId"] = dgAvailableCandidates.DataKeys[i].ToString();
                obj._fk_recId = dgAvailableCandidates.DataKeys[i].ToString();
            }

        }
        ds.Tables[0].Rows.Add(dr);
        return ds;
    }

这里我的问题是当ds.Tables[0].Rows.Add(dr);我置于循环之外时,它只将最后一个选定的记录添加到ds,当我将其放在loop内时,它会抛出exception 1}}

  

[pk_scrndRecId]列是只读的

当我将其放在if块内时,会抛出exception

  

此行已属于此表。

我无法理解为什么此代码未将datagrid的所有选定行添加到ds

请帮忙。谢谢!

1 个答案:

答案 0 :(得分:1)

您必须创建一个新行并将其添加到循环内的数据 ,因此每次创建新实例并将其添加到数据表中。
检查更新的代码。

public DataSet getMain()
{
    DataSet ds = CFObj.GetSchemaRequest();
    DataRow dr;
    for (int i = 0; i < dgAvailableCandidates.Items.Count; i++)
    {
        CheckBox saveChkBoxItem = (CheckBox)dgAvailableCandidates.Items[i].FindControl("chkbox_SelectCandidate");
        if (saveChkBoxItem.Checked)
        {
            dr = ds.Tables[0].NewRow();
            //ds.Tables[0].Columns["pk_scrndRecId"].ReadOnly = false;
            dr["pk_scrndRecId"] = "0";
            dr["fk_jobId"] = ddl_jobList.SelectedValue.ToString();
            obj._fkjob_Id = ddl_jobList.SelectedValue.ToString();
            dr["fk_recId"] = dgAvailableCandidates.DataKeys[i].ToString();
            obj._fk_recId = dgAvailableCandidates.DataKeys[i].ToString();
            ds.Tables[0].Rows.Add(dr);
        }
    }

    return ds;
}