Ich habe eine GridView mit einem DataSource
(SQL-Datenbank). Ich möchte eine Spalte ausblenden, kann aber trotzdem auf den Wert zugreifen, wenn ich den Datensatz auswähle. Kann mir jemand zeigen, wie das geht?
Dies ist die Spalte, die ich verbergen und trotzdem auf ihren Wert zugreifen möchte:
<asp:BoundField DataField="Outlook_ID" HeaderText="OutlookID" />
Ich habe alles versucht, um die Spalte zu verbergen (Eigenschaft Visible="false"
), aber ich kann nicht auf den Wert zugreifen.
Wenn ich mich nicht irre, enthält GridView
nicht die Werte von BoundColumns
mit dem Attribut visible="false"
. Zwei Dinge, die Sie hier tun können, eine (wie in der Antwort von V4Vendetta erklärt), um Datakeys
zu verwenden. Oder Sie können Ihr BoundColumn
in ein TemplateField
ändern. Fügen Sie im ItemTemplate
ein Steuerelement wie Label
hinzu, machen Sie dessen Sichtbarkeit falsch und geben Sie diesem Label
Ihren Wert.
<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);
}
Definieren Sie einen Stil in CSS:
.hiddencol { display: none; }
Dann füge das ItemStyle-CssClass="hiddencol"
und der HeaderStyle-CssClass="hiddencol"
Attribut zum Rasterfeld:
<asp:BoundField DataField="ID" HeaderText="ID" ItemStyle-CssClass="hiddencol" HeaderStyle-CssClass="hiddencol" ClientIDMode="Static" />
Sie können DataKeys verwenden zum Abrufen des Werts solcher Felder, da (wie Sie sagten) wenn Sie ein normales BoundField
als sichtbares false festlegen, der Wert nicht ermittelt werden kann.
In dem .aspx
file setzt die Eigenschaft GridView
DataKeyNames = "Outlook_ID"
In einem Event-Handler können Sie nun wie folgt auf den Wert dieses Schlüssels zugreifen:
grid.DataKeys[rowIndex]["Outlook_ID"]
Dadurch erhalten Sie die ID am angegebenen Zeilenindex des Rasters.
Sie können es programmgesteuert tun:
grid0.Columns[0].Visible = true;
grid0.DataSource = dt;
grid0.DataBind();
grid0.Columns[0].Visible = false;
Auf diese Weise setzen Sie die Spalte vor der Datenbindung auf sichtbar, sodass die Spalte generiert wird. Wenn Sie die Spalte auf nicht sichtbar setzen, wird sie nicht angezeigt.
Wenn Sie ein TemplateField
in den Spalten Ihres GridView
haben und beispielsweise ein Steuerelement mit dem Namen blah daran gebunden haben. Dann platziere das Outlook_id
als HiddenField
dort so:
<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>
Ergreifen Sie nun die Zeile für den Fall, dass Sie das Outlook_id
und dann auf die Steuerung zugreifen.
Um auf RowDataBound
zuzugreifen, gehen Sie folgendermaßen vor:
string outlookid = ((HiddenField)e.Row.FindControl("HiddenOutlookID")).Value;
Gehen Sie zurück, wenn Sie Probleme beim Zugriff auf die angeklickte Zeile haben. Und vergessen Sie nicht, die Veranstaltung anzugeben, bei der Sie darauf zugreifen möchten.
Sie können die Spalte hidden
auf der Serverseite festlegen. Aus irgendeinem Grund unterscheidet sich dies von der Angabe des aspx
-Codes. Es kann immer noch so referenziert werden, als wäre es sichtbar. Fügen Sie diesen Code einfach zu Ihrem OnDataBound
-Ereignis hinzu.
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;
}
}
Lassen Sie sichtbare Spalten, bevor Sie das GridView
ausfüllen. Füllen Sie das GridView
und blenden Sie die Spalten aus.
So erhalten Sie den Wert einer ausgeblendeten Spalte in einem GridView
, der auf Visible=False
Gesetzt ist: Fügen Sie das Datenfeld in diesem Fall SpecialInstructions
zur DataKeyNames-Eigenschaft der Bindung hinzu GridView, und greifen Sie auf diese Weise zu.
txtSpcInst.Text = GridView2.DataKeys(GridView2.SelectedIndex).Values("SpecialInstructions")
Das ist es, es funktioniert immer sehr einfach.
Ich habe eine neue Lösung, bei der die Spalte auf der Clientseite mit css oder javascript oder jquery ausgeblendet wird.
.col0
{
display: none;
}
Und setze gvClientDetails.Columns[0].Visible = true;
, Wenn Sie false
eingestellt haben.
Ich habe eine ähnliche Methode wie user496892 verwendet:
SPBoundField hiddenField = new SPBoundField();
hiddenField.HeaderText = "Header";
hiddenField.DataField = "DataFieldName";
grid.Columns.Add(hiddenField);
grid.DataSource = myDataSource;
grid.DataBind();
hiddenField.Visible = false;
Wenn ich auf einen Wert von GridView
zugreifen möchte, bevor GridView
angezeigt wurde.
BoundField
und binde DataField
normal.RowDataBound
führe ich in diesem Ereignis einen Prozess aus.Bevor GridView
angezeigt wurde, schreibe ich Folgendes:
protected void GridviewLecturer_PreRender(object sender, EventArgs e)
{
GridviewLecturer.Columns[0].Visible = false;
}
Sie können es hinter Code tun.
Set visible= false
für Spalten nach Datenbindung. Danach können Sie die Sichtbarkeit "true" in row_selection aus der Rasteransicht wieder herstellen. Es wird funktionieren !!