C# 如何在gridview中使用C编程为DataKeyName赋值#

C# 如何在gridview中使用C编程为DataKeyName赋值#,c#,asp.net,gridview,C#,Asp.net,Gridview,我有一个网格视图。我通过GridViewgvExemptSub中的c#在其中添加列,并在单击按钮时从另一个GridViewgvsub检索数据。我想将数据行值分配给我正在从另一个GridView检索的DataKeyName,但我不知道如何分配 <asp:GridView ID="gvExemptSub" runat="server" Width="100%" DataKeyNames="LID,BID"> <Columns>

我有一个网格视图。我通过GridView
gvExemptSub
中的c#在其中添加列,并在单击按钮时从另一个GridView
gvsub
检索数据。我想将数据行值分配给我正在从另一个GridView检索的DataKeyName,但我不知道如何分配

<asp:GridView ID="gvExemptSub" runat="server" Width="100%" DataKeyNames="LID,BID">
    <Columns>                     
    </Columns>
</asp:GridView>

protected void BtnAddSubj_Click(object sender, EventArgs e)
{                               
    DataTable  dt = new DataTable();
    dt.TableName = "ExemptSubj";
    dt.Columns.Add("QUALIFICATION", typeof(string));
    dt.Columns.Add("SUBJECT", typeof(string));
    dt.Columns.Add("LEVEL", typeof(string));
    dt.Columns.Add("UNIVERSITY", typeof(string));                   

    DataRow dr;

    foreach (GridViewRow srow in gvSubj.Rows)
    {
        if (srow.RowType == DataControlRowType.DataRow)
        {                           
            dr = dt.NewRow();
            dr[0] = ddlQualification.SelectedItem;
            string SUBJECT = srow.Cells[1].Text;
            SUBJECT = SUBJECT.Replace("amp;", "");
            dr[1] = SUBJECT;                               
            dr[4] = int.Parse(gvSubj.DataKeys[srow.RowIndex]["LEVEL_ID"].ToString());
            dr[2] = srow.Cells[2].Text;
            dr[3] = ddlUNI.SelectedItem.Text;
            dr[5] = ddlUNI.SelectedValue;
            dt.Rows.Add(dr);                            
        }
    }
    ViewState["ExemptSubj"] = dt;
    //gvExemptSubj.DataKeyNames =  (dr[4], dr[5])
    gvExemptSubj.DataSource = dt;
    gvExemptSubj.DataBind(); 
}

受保护的无效BtnAddSubj_单击(对象发送方,事件参数e)
{                               
DataTable dt=新的DataTable();
dt.TableName=“exemptsubc”;
添加(“限定”,类型(字符串));
添加(“主题”,类型(字符串));
添加(“级别”,类型(字符串));
添加(“大学”,类型(字符串));
数据行dr;
foreach(gvsub.Rows中的GridViewRow srow)
{
if(srow.RowType==DataControlRowType.DataRow)
{                           
dr=dt.NewRow();
dr[0]=ddlQualification.SelectedItem;
字符串SUBJECT=srow.Cells[1]。文本;
主题=主题。替换(“amp;”,“”);
dr[1]=受试者;
dr[4]=int.Parse(gvsub.DataKeys[srow.RowIndex][“LEVEL_ID”].ToString());
dr[2]=srow.Cells[2]。文本;
dr[3]=ddlUNI.SelectedItem.Text;
dr[5]=ddlUNI.SelectedValue;
dt.Rows.Add(dr);
}
}
ViewState[“exemptsubc”]=dt;
//gvExcemptSubc.DataKeyNames=(dr[4],dr[5])
gvExcemptSubc.DataSource=dt;
gvExcemptSubc.DataBind();
}

您可以使用字符串数组以编程方式绑定它们:

GridView1.DataKeyNames = new string[2] { "ColumnA", "ColumnB" };

如何将ddlUNI.SelectedValue作为Datarow分配给不是列的DatakeyNames“BID”…您不能。密钥必须存在于数据集中。如果您添加一个datakey列,它可能会工作:
dt.Columns.add(“datakey”,typeof(int))那么如何隐藏该数据键列?因为我不想让BID、LID在gridview中可见……如果您不想在使用自动生成的列时使列可见,则需要将它们隐藏在onrowdatabound或onrowcreated事件中。或者停止使用数据键。