web-dev-qa-db-ja.com

列(GridView)を非表示にして、その値にアクセスする方法は?

GridViewにDataSource(SQL Database)があります。列を非表示にしますが、レコードを選択すると値にアクセスできます。誰かがこれを行う方法を教えてもらえますか?

これは私が非表示にしたいのに、その値にアクセスしたい列です:

<asp:BoundField DataField="Outlook_ID" HeaderText="OutlookID" />

列(プロパティVisible="false")を非表示にしようとしましたが、その値にアクセスできません。

69
SamekaTV

間違っていない場合、GridViewvisible="false"属性を持つBoundColumnsの値を保持しません。ここでできることは2つあります。1つ(V4Vendettaからの回答で説明)はDatakeysを使用します。または、BoundColumnTemplateFieldに変更できます。 ItemTemplateで、Labelなどのコントロールを追加し、その可視性をfalseにして、そのLabelに値を与えます。

44
futile
<head runat="server">
<title>Accessing GridView Hidden Column value </title>
<style type="text/css">
  .hiddencol
  {
    display: none;
  }
</style>

<asp:BoundField HeaderText="Email ID" DataField="EmailId" ItemStyle-CssClass="hiddencol" HeaderStyle-CssClass="hiddencol" >
</asp:BoundField>

ArrayList EmailList = new ArrayList();
foreach (GridViewRow itemrow in gvEmployeeDetails.Rows)
{
  EmailList.Add(itemrow.Cells[YourIndex].Text);
}
80
Mubashir Ahmed

CSSでスタイルを定義します。

.hiddencol { display: none; }

次に、ItemStyle-CssClass="hiddencol"およびHeaderStyle-CssClass="hiddencol"属性をグリッドフィールドに追加します。

<asp:BoundField DataField="ID" HeaderText="ID" ItemStyle-CssClass="hiddencol"  HeaderStyle-CssClass="hiddencol" ClientIDMode="Static" />
39
Niloofar

DataKeysを使用できますそのようなフィールドの値を取得するために、(あなたが言ったように)通常のBoundFieldをfalseに設定すると、値を取得できないためです。

.aspxファイルでGridViewプロパティを設定します

DataKeyNames = "Outlook_ID"

これで、イベントハンドラで次のようにこのキーの値にアクセスできます。

grid.DataKeys[rowIndex]["Outlook_ID"]

これにより、グリッドの指定されたrowindexのIDが得られます。

33
V4Vendetta

プログラムでそれを行うことができます:

grid0.Columns[0].Visible = true;
grid0.DataSource = dt;
grid0.DataBind();
grid0.Columns[0].Visible = false;

この方法で、データバインディングの前に列を表示に設定して、列を生成します。列を非表示に設定したため、表示されません。

20
user496892

TemplateFieldの列内にGridViewがあり、たとえばblahという名前のコントロールがバインドされている場合。次に、Outlook_idHiddenFieldとして次のように配置します。

<asp:TemplateField HeaderText="OutlookID">
    <ItemTemplate>
        <asp:Label ID="blah" runat="server">Existing Control</asp:Label>
        <asp:HiddenField ID="HiddenOutlookID" runat="server" Value='<%#Eval("Outlook_ID") %>'/>
    </ItemTemplate>
</asp:TemplateField>

次に、Outlook_idが必要なイベントの行を取得し、コントロールにアクセスします。
RowDataBoundの場合は、次のようにアクセスします。

string outlookid = ((HiddenField)e.Row.FindControl("HiddenOutlookID")).Value;

クリックした行にアクセスできない場合は、戻ってください。そして、あなたがそれにアクセスしたいイベントに言及することを忘れないでください。

10
naveen

サーバー側でhidden列を作成できます。何らかの理由で、これはaspxコードを実行するのとは異なります。表示されているかのように参照できます。このコードをOnDataBoundイベントに追加するだけです。

protected void gvSearchResults_DataBound(object sender, EventArgs e)
{
    GridView gridView = (GridView)sender;

    if (gridView.HeaderRow != null && gridView.HeaderRow.Cells.Count > 0)
    {
        gridView.HeaderRow.Cells[UserIdColumnIndex].Visible = false;
    }

    foreach (GridViewRow row in gvSearchResults.Rows)
    {
        row.Cells[UserIdColumnIndex].Visible = false;
    }
}
8
Ben Foster

GridViewを埋める前に表示列を残します。 GridViewを入力して、列を非表示にします。

4
rube

Visible=Falseに設定されたGridViewの非表示列の値を取得する方法は次のとおりです。この場合SpecialInstructionsのデータフィールドをバインドされたGridViewのDataKeyNamesプロパティに追加します。この方法でアクセスします。

txtSpcInst.Text = GridView2.DataKeys(GridView2.SelectedIndex).Values("SpecialInstructions")

それだけです、毎回非常に簡単に動作します。

2
Benchmark

cssまたはjavascriptまたはjqueryを使用して、クライアント側の列を非表示にする新しいソリューションがあります。

.col0
{
  display: none;
}

falseに設定した場合は、gvClientDetails.Columns[0].Visible = true;を設定します。

2
mukund

私はuser496892に似た方法を使用しました:

SPBoundField hiddenField = new SPBoundField();
hiddenField.HeaderText = "Header";
hiddenField.DataField = "DataFieldName";
grid.Columns.Add(hiddenField);

grid.DataSource = myDataSource;
grid.DataBind();

hiddenField.Visible = false;
1
Amy Struck

GridViewが表示される前に、GridViewの値にアクセスしたい場合。

  1. BoundFieldがあり、DataFieldを名目上バインドします。
  2. RowDataBoundイベントでは、そのイベントで何らかの処理を行います。
  3. GridViewが表示される前に、これを書きます。

    protected void GridviewLecturer_PreRender(object sender, EventArgs e) 
    {
        GridviewLecturer.Columns[0].Visible = false;
    }
    
0
Mitr Raiputta

コードビハインドで実行できます。

Set visible= falseデータバインド後の列。その後、再びグリッドビューから可視性 "true" in row_selection functionを行うことができます。それは動作します!!

0
Abhisek