2011-07-05 4 views
0

저는 이것이 내게있어 쉬운 일이라고 생각 했었습니다. (또는 동부 표준시 atl 동쪽 사람을 찾으십시오.)하지만 문제가 있습니다.Gridview의 Cell 값에 액세스하십시오.

내있는 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 이벤트와 함께),하지만 가치를 끌어낼 수있는 모든 방법은 모두 LinqDatasource가 없으면 어떻게 될지와 같이 null이됩니다.

나는 시도 (정말 잘 될 것 같지 않았다 다른의 회전은, 그래서 나열되지) 않은 : 어떤 도움

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