我认为这对我来说很容易找出(或atl东在网上找到有人),但我遇到了问题。在gridview中访问单元格值
我有下面的代码创建我的GridView:在C#侧
<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>
现在,我希望能够拉从第一列中的值(它是隐藏的),并用它来删除(具有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:
我看到马拉什和我都想出了隐藏领域的解决方案,但我想我找到了最好的一个(导致其简单,内置)。
在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;
嗯......这很有趣。你的方式工作,但只有当列可见。如果它标记为不可见,则该值返回为空白。其实它甚至没有给我和隐藏的列上的错误,我的数据字段值列甚至不存在!只有我发现可见的人。 – Limey
检查第二个解决方案 –
感谢您的帮助!你帮助我走上了正确的道路! – Limey