webentwicklung-frage-antwort-db.com.de

Wie kann ich eine Spalte (GridView) ausblenden und trotzdem auf ihren Wert zugreifen?

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.

69
SamekaTV

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.

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

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" />
39
Niloofar

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.

33
V4Vendetta

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.

20
user496892

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.

10
naveen

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;
    }
}
8
Ben Foster

Lassen Sie sichtbare Spalten, bevor Sie das GridView ausfüllen. Füllen Sie das GridView und blenden Sie die Spalten aus.

4
rube

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.

2
Benchmark

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.

2
mukund

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;
1
Amy Struck

Wenn ich auf einen Wert von GridView zugreifen möchte, bevor GridView angezeigt wurde.

  1. Ich habe ein BoundField und binde DataField normal.
  2. Im Ereignis RowDataBound führe ich in diesem Ereignis einen Prozess aus.
  3. Bevor GridView angezeigt wurde, schreibe ich Folgendes:

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

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 !!

0
Abhisek