C# 若数据绑定列Visibility为False,则我无法读取单元格值

C# 若数据绑定列Visibility为False,则我无法读取单元格值,c#,asp.net,gridview,C#,Asp.net,Gridview,我有一个gridview元素,用于列出成员对我的问卷的答案。所有答案作为字符串存储在一列中。每4位数字是相应问题的答案。对于包含4个问题的问卷,答案可以是0001000600030040001 <asp:GridView ID="gv" runat="server" AutoGenerateColumns="False" DataKeyNames="id, memberid, qid, qdate,

我有一个gridview元素,用于列出成员对我的问卷的答案。所有答案作为字符串存储在一列中。每4位数字是相应问题的答案。对于包含4个问题的问卷,答案可以是
0001000600030040001

<asp:GridView ID="gv" 
              runat="server"  
              AutoGenerateColumns="False" 
              DataKeyNames="id, memberid, qid, qdate, member, membermail, qtitle, answer"
              OnSelectedIndexChanging="gv_SelectedIndexChanged" >
    <Columns>
        <asp:BoundField DataField="id" />
        <asp:BoundField DataField="memberid" HeaderText="Member ID" />
        <asp:BoundField DataField="qid" HeaderText="Questionnaire ID" />
        <asp:BoundField DataField="qdate" HeaderText="Date" />
        <asp:BoundField DataField="member" HeaderText="Member Name" />
        <asp:BoundField DataField="membermail" HeaderText="Member E-mail" />
        <asp:BoundField DataField="qtitle" HeaderText="Questionnaire" />
        <asp:BoundField DataField="answer"  />
        <asp:CommandField SelectText="Analyze" ShowSelectButton="True" ButtonType="Link" HeaderText="Analysis" />
            </Columns>
    </asp:GridView>

protected void gv_SelectedIndexChanged(object sender, GridViewSelectEventArgs e)
{
    string id         = gv.Rows[e.NewSelectedIndex].Cells[0].Text;
    string memberid   = gv.Rows[e.NewSelectedIndex].Cells[1].Text;
    string qid        = gv.Rows[e.NewSelectedIndex].Cells[2].Text;
    string qdate      = gv.Rows[e.NewSelectedIndex].Cells[3].Text;
    string memberName = gv.Rows[e.NewSelectedIndex].Cells[4].Text;
    string memberMail = gv.Rows[e.NewSelectedIndex].Cells[5].Text;
    string qtitle     = gv.Rows[e.NewSelectedIndex].Cells[6].Text;
    string answer     = gv.Rows[e.NewSelectedIndex].Cells[7].Text;

    //...
} 

另一方面,如果
Visible=“true”
一切正常。但我不想在gridview中列出答案。

您可以使用模板字段,如下所示

<asp:TemplateField>
    <ItemTemplate>
        <asp:HiddenField runat="server" ID="hiddenFieldAnswer" Value='<%# Bind("answer") %>' />
    </ItemTemplate>
</asp:TemplateField>

您可以使用模板字段,如下所示

<asp:TemplateField>
    <ItemTemplate>
        <asp:HiddenField runat="server" ID="hiddenFieldAnswer" Value='<%# Bind("answer") %>' />
    </ItemTemplate>
</asp:TemplateField>

由于您已经将
answer
的值作为
DataKeyNames
的一部分,因此在
DataKeyNames
中存储多个值时,您可以通过以下方式获得相应的值

protected void gv_SelectedIndexChanged(object sender, GridViewSelectEventArgs e)
{
    ....
    string answer= gv.DataKeys[e.NewSelectedIndex].Values["answer"].ToString();
    ...
}

由于您已经将
answer
的值作为
DataKeyNames
的一部分,因此在
DataKeyNames
中存储多个值时,您可以通过以下方式获得相应的值

protected void gv_SelectedIndexChanged(object sender, GridViewSelectEventArgs e)
{
    ....
    string answer= gv.DataKeys[e.NewSelectedIndex].Values["answer"].ToString();
    ...
}

不能使用DataKeys或DataKeyName来解决吗?我认为DataKeyNames属性用于解决这类问题。您仍然可以使用DataKeyNames来获取值(请参阅我的答案)。我也同意@Kiran Hegde的答案,它会起作用的。难道不能用数据键或数据键名来解决吗?我认为DataKeyNames属性用于解决这类问题。您仍然可以使用DataKeyNames来获取值(请参阅我的答案)。我也同意@Kiran Hegde的答案,它会起作用的。
protected void gv_SelectedIndexChanged(object sender, GridViewSelectEventArgs e)
{
    ....
    string answer= gv.DataKeys[e.NewSelectedIndex].Values["answer"].ToString();
    ...
}