在gridview中访问单元格值

时间:2011-07-05 19:03:09

标签: asp.net

我认为这对我来说很容易弄清楚(或者东方人找到有人在线的人),但我遇到了问题。

我有以下用于创建gridview的代码:

    <asp:GridView runat="server" ID="ContactsGrid" AutoGenerateColumns="False" DataSourceID="LinqContact"
            CellPadding="4" ForeColor="#333333" GridLines="None" OnRowDeleting="ContactsGridView_RowDeleting" >
    <AlternatingRowStyle BackColor="White" />
    <Columns>
        <asp:BoundField DataField="IConact_ID" Visible="false" ReadOnly="true" />
        <asp:BoundField DataField="cFirstName" HeaderText="First Name" ReadOnly="True" />
        <asp:CommandField HeaderText="Delete" ShowDeleteButton="True" />
    </Columns>
</asp:GridView>

<asp:LinqDataSource ID="LinqContact" runat="server" ContextTypeName="TIPS.App_Data.TIPSDataContext" onselecting="LinqContact_Selecting" >
</asp:LinqDataSource>

现在在c#方面,我希望能够从第一列(隐藏)中提取值并使用它来删除该特定记录(使用onroedeleting事件),但是我找到的所有方法都可以这个值都是null,就像我没有LinqDatasource会发生什么。

我已经尝试过了(还有其他一些看起来不对的,所以没有列出):

ContactsGrid.SelectedRow.Cells[0].Text;
ContactsGrid.Columns[0];

感谢您的帮助!

编辑:

好的,所以我发现当你使用网格隐藏它时,你无法获得隐藏列的值。我确实找到了解决方法。如果您使用css隐藏列,您仍然可以访问列。

<style type="text/css">
.hiddencol
{
    display:none;
}

</style>

<asp:BoundField DataField="IContact_ID"  ReadOnly="true" itemstyle-cssclass="hiddencol" />

我不认为这是首选的.net方式。我找到了一个名为datakeynames的引用,这似乎是正确的方法。我将深入研究下一步。

编辑#2:

我看到Maras和我都想出了一个隐藏领域的解决方案,但我认为我找到了最好的解决方案(因为它简单而内置)。

在gridview标记中,您可以将datakeynames属性设置为列(如主键,这是我存储在隐藏列中的那个),您还可以存储多个列。

    <asp:GridView runat="server" ID="ContactsGrid" AutoGenerateColumns="False" DataSourceID="LinqContact" DataKeyNames="IContact_ID"
CellPadding="4" ForeColor="#333333" GridLines="None" OnRowDeleting="ContactsGridView_RowDeleting" >

然后你可以用:

来引用它
ContactsGrid.DataKeys[e.RowIndex].Value;

2 个答案:

答案 0 :(得分:1)

试试这个:

void ContactsGrid_RowDeleting(Object sender, GridViewDeleteEventArgs e)
{
    ContactsGrid.Rows[e.RowIndex].Cells[0];
}

有关详细信息,请参阅此处http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowdeleting.aspx#Y200

在作者评论后编辑:

如果您将其可见性设置为“false”,则您的浏览器无法在回发中将您发回。您可以像第二个示例中那样使用隐藏字段:

<asp:GridView runat="server" ID="gv" OnRowDeleting="gv_RowDeleting" AutoGenerateColumns="false" AutoGenerateDeleteButton="true">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:HiddenField ID="hf" runat="server" Value="<%# ((YourItemType)Container.DataItem).Id %>" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>


protected void gv_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
    HiddenField hf = (HiddenField) gv.Rows[e.RowIndex].Cells[0].FindControl("hf");
}

答案 1 :(得分:1)

我之前发现过这篇文章 - 看起来像一个链接而不是一个按钮,但可能是同一个解决方案:

Get text of ASP.NET HyperLinkField in GridView

斯图