GridViewにDataSource
(SQL Database)があります。列を非表示にしますが、レコードを選択すると値にアクセスできます。誰かがこれを行う方法を教えてもらえますか?
これは私が非表示にしたいのに、その値にアクセスしたい列です:
<asp:BoundField DataField="Outlook_ID" HeaderText="OutlookID" />
列(プロパティVisible="false"
)を非表示にしようとしましたが、その値にアクセスできません。
間違っていない場合、GridView
はvisible="false"
属性を持つBoundColumns
の値を保持しません。ここでできることは2つあります。1つ(V4Vendettaからの回答で説明)はDatakeys
を使用します。または、BoundColumn
をTemplateField
に変更できます。 ItemTemplate
で、Label
などのコントロールを追加し、その可視性をfalseにして、そのLabel
に値を与えます。
<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);
}
CSSでスタイルを定義します。
.hiddencol { display: none; }
次に、ItemStyle-CssClass="hiddencol"
およびHeaderStyle-CssClass="hiddencol"
属性をグリッドフィールドに追加します。
<asp:BoundField DataField="ID" HeaderText="ID" ItemStyle-CssClass="hiddencol" HeaderStyle-CssClass="hiddencol" ClientIDMode="Static" />
DataKeysを使用できますそのようなフィールドの値を取得するために、(あなたが言ったように)通常のBoundField
をfalseに設定すると、値を取得できないためです。
.aspx
ファイルでGridView
プロパティを設定します
DataKeyNames = "Outlook_ID"
これで、イベントハンドラで次のようにこのキーの値にアクセスできます。
grid.DataKeys[rowIndex]["Outlook_ID"]
これにより、グリッドの指定されたrowindexのIDが得られます。
プログラムでそれを行うことができます:
grid0.Columns[0].Visible = true;
grid0.DataSource = dt;
grid0.DataBind();
grid0.Columns[0].Visible = false;
この方法で、データバインディングの前に列を表示に設定して、列を生成します。列を非表示に設定したため、表示されません。
TemplateField
の列内にGridView
があり、たとえばblahという名前のコントロールがバインドされている場合。次に、Outlook_id
をHiddenField
として次のように配置します。
<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;
クリックした行にアクセスできない場合は、戻ってください。そして、あなたがそれにアクセスしたいイベントに言及することを忘れないでください。
サーバー側で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;
}
}
GridView
を埋める前に表示列を残します。 GridView
を入力して、列を非表示にします。
Visible=False
に設定されたGridView
の非表示列の値を取得する方法は次のとおりです。この場合SpecialInstructions
のデータフィールドをバインドされたGridViewのDataKeyNamesプロパティに追加します。この方法でアクセスします。
txtSpcInst.Text = GridView2.DataKeys(GridView2.SelectedIndex).Values("SpecialInstructions")
それだけです、毎回非常に簡単に動作します。
cssまたはjavascriptまたはjqueryを使用して、クライアント側の列を非表示にする新しいソリューションがあります。
.col0
{
display: none;
}
false
に設定した場合は、gvClientDetails.Columns[0].Visible = true;
を設定します。
私はuser496892に似た方法を使用しました:
SPBoundField hiddenField = new SPBoundField();
hiddenField.HeaderText = "Header";
hiddenField.DataField = "DataFieldName";
grid.Columns.Add(hiddenField);
grid.DataSource = myDataSource;
grid.DataBind();
hiddenField.Visible = false;
GridView
が表示される前に、GridView
の値にアクセスしたい場合。
BoundField
があり、DataField
を名目上バインドします。RowDataBound
イベントでは、そのイベントで何らかの処理を行います。GridView
が表示される前に、これを書きます。
protected void GridviewLecturer_PreRender(object sender, EventArgs e)
{
GridviewLecturer.Columns[0].Visible = false;
}
コードビハインドで実行できます。
Set visible= false
データバインド後の列。その後、再びグリッドビューから可視性 "true" in row_selection functionを行うことができます。それは動作します!!