2011-07-05 118 views
0

我認爲這對我來說很容易找出(或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; 

回答

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

。筆者的意見後

編輯:

如果你把它的知名度爲「假」,那麼還有什麼你的瀏覽器可以送你回去的回傳。您可以在第二個例子中使用隱藏域,如:

<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"); 
} 
+0

嗯......這很有趣。你的方式工作,但只有當列可見。如果它標記爲不可見,則該值返回爲空白。其實它甚至沒有給我和隱藏的列上的錯誤,我的數據字段值列甚至不存在!只有我發現可見的人。 – Limey

+0

檢查第二個解決方案 –

+0

感謝您的幫助!你幫助我走上了正確的道路! – Limey