2011-07-05 10 views
0

これは私が理解しやすい(またはアール・イーストはオンラインの人を見つける)と思ったが、私は問題にぶつかっている。グリッドビューのセル値にアクセスする

私は私の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]; 

感謝を!

編集:

[OK]を、ので、私はあなたがグリッドを使用して、それを隠したときに、これが隠されている列の値を取得することはできませんことがわかりました。私は仕事を見つけました。代わりにcssを使用して列を非表示にすると、列にアクセスできます。

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

</style> 

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

私はこれが好ましいネットだとは思わない。私は、正しい方法であると思われる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

2番目の解決策を確認してください –

+0

助けてくれてありがとう!あなたは私が正しい道に乗るのを手伝った! – Limey

関連する問題