我认为这对我来说很容易弄清楚(或者东方人找到有人在线的人),但我遇到了问题。
我有以下用于创建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;
答案 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)