2011-03-15 3 views
0

グリッドビューがあり、いくつかの列があります。 1つの列を非表示にしたいが、レコードを選択するとその値にアクセスする。列を非表示にしてもその値にはどのようにアクセスするのですか?

誰かがこれを達成するのに役立つでしょうか?

ご了承ください。

これは私のgridviewです:OutlookIDは非表示にする列です! <asp:GridView ID="gvOutlookMeldingen" runat="server" AllowSorting="True" AutoGenerateColumns="False" AutoGenerateSelectButton="True" onselectedindexchanged="GridView_SelectedIndexChanged"> <Columns> <asp:BoundField DataField="Melder" HeaderText="Melder" /> <asp:BoundField DataField="Onderwerp" HeaderText="Onderwerp" /> <asp:TemplateField HeaderText="Omschrijving"> <ItemTemplate> <div style="overflow:auto; width: 500px; height: 150px;"> <asp:Label ID="lblOmschrijving" runat="server" Text='<%# Bind("Omschrijving")%>'></asp:Label> </div> </ItemTemplate> </asp:TemplateField> <asp:BoundField DataField="Meldingsdatum" HeaderText="Meldingsdatum" /> <asp:BoundField DataField="OutlookID" HeaderText="OutlookID" Visible="false" /> </Columns> </asp:GridView>

この は私がレコードを選択する際のコードです:

Label lblOmschrijving = (Label)gvOutlookMeldingen.SelectedRow.FindControl("lblOmschrijving"); 
      //Label lblOutlookID = (Label)gvOutlookMeldingen.SelectedRow.FindControl("lblOutlookID"); 

      Response.Redirect("Detailscherm.aspx?" 
       + "melder=" + Server.UrlEncode(gvOutlookMeldingen.SelectedRow.Cells[1].Text) 
       + "&meldingsdatum=" + gvOutlookMeldingen.SelectedRow.Cells[4].Text 
       + "&onderwerp=" + Server.UrlEncode(gvOutlookMeldingen.SelectedRow.Cells[2].Text) 
       + "&outlookid=" + Server.UrlEncode(gvOutlookMeldingen.SelectedRow.Cells[5].Text) 
       + "&omschrijving=" + Server.UrlEncode(lblOmschrijving.Text) 
       + "&niv1=" + "" 
       + "&niv2=" + ""); 
+2

TemplateColumnと表示したい項目の設定CSSプロパティ:なし。 – eugeneK

+2

クライアント側コードまたはサーバー側コードの値にアクセスしますか?どんな状況で? – David

+0

@eugeneK値が消えるだけの列が表示されるので、これは機能しません。と私は値を得ることができません – SamekaTV

答えて

4

あなたはデータをバインドさした後、このコードを設定してください。この機能を利用するには、次のようにします:

MyGridView.Columns[0].visible = true; 
MyGridView.DataBind(); 
MyGridView.Columns[0].visible = false; 

これで最初の列は非表示になりますが、その値にアクセスできるはずです。

+0

私はすでにこれを試しました。動作しません! – SamekaTV

+0

いつも私のために働いています。たぶん、コードを投稿して、何をしようとしているのか正確に見ることができます。 –

+0

私は私の質問を編集しました。 – SamekaTV

0

クライアント側でデータを利用できないようにするには、サーバーサイドのVisible = "False"プロパティをDataControlField(好ましくはマークアップ内)のものに設定する必要があります。それでも、サーバー側から列にアクセスできます。

GridViewのDataKeysプロパティを使用することを検討することをお勧めします。これは、ニーズに合わせてより適切な場合があります。

+0

私はすでにこれをしました! – SamekaTV

+0

ポストバック中に行が正しくポピュレートされていますか?あなたが提供したコードにブレークポイントを設定し、 'gvOutlookMeldingen.Rows'と' gvOutlookMeldingen.SelectedRow'を見てください。 ページにリダイレクトしてQueryStringパラメータを渡すだけであれば、[HyperLinkField](http://msdn.microsoft.com/en-us/library/system.web.ui)のSelect列を作成してください。 .webcontrols.hyperlinkfield.aspx)、DataNavigateUrlFieldsとDataNavigateUrlFormatStringを設定して、QueryStringで必要なデータを提供しますか? –

0

[SELECT]ボタンの代わりに[テンプレートを作成]列。

'%>を( " カラムを望んでいた" "ID {0} = somepage.aspx")<%位 評価'

PostbackUrl =を設定します。デザイナーを介して列を削除します。

0

また、クライアント側で非表示にすることもできます。 Javascriptで

document.getElementById(myObject).visible = "false"; 
0

私たちはコードの下.INのGridView rowCreatedイベントで=偽 セットの可視性に.Tryをレンダリングしないことになる設計時に、私は=偽

第2の列の可視性を設定しています偽のコントロールの可視性を設定します

保護ボイドgrid_RowCreated(オブジェクト送信者、GridViewRowEventArgs E) {IF(e.Row.RowType == DataControlRowType.DataRow) {e.Row.Cells [2] .Visible = FALSE;

 } 
     if (e.Row.RowType == DataControlRowType.Header) 
     { 
      e.Row.Cells[2].Visible = false; 

     } 
     if (e.Row.RowType == DataControlRowType.Footer) 
     { 
      e.Row.Cells[2].Visible = false; 

     } 
    } 

今すぐ値を取得してください。値を取得します。

0

私は同じ問題がありました。

列を非表示にして、値をコード内に保持することはできません。

javascriptを使用してクライアント側で直接非表示にする必要があります。

私はそれをやった:私のCSSやページで

を:

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

その後gridViewerのBoundFieldにスタイルを追加します。例えば

 <asp:BoundField DataField="AgentGUID" HeaderText="AgentGUID" ReadOnly="True" SortExpression="AgentGUID" 
      meta:resourcekey="BoundFieldResource1"> 
      <HeaderStyle CssClass="hiddencol" /> 
      <ItemStyle CssClass="hiddencol" /> 
      <FooterStyle CssClass="hiddencol" /> 
     </asp:BoundField> 
を使用でき