Frage

Ich verwende eine Liste von Objekten als Datenquelle meiner Gridview und wenn ich Spalten auf nicht sichtbar sein die Updates fehlschlagen, weil der Wert dieser Spalten auf Null geändert wird (und die Spalte lässt Nullwert nicht) . Die Werte existieren, wenn die Spalten sichtbar sind, aber ich mag wirklich nicht diese Spalten angezeigt werden, weil zum größten Teil, sie sind ID-Spalten, dass der Benutzer muss nicht wirklich sehen.

EDIT: Ich habe die versteckte Feld Option versucht, aber es setzt immer noch den Wert auf Null. Ich habe auf der Seite Quelle sah und das verborgene Feld existiert mit dem entsprechenden Wert ...

War es hilfreich?

Lösung

Ich fand diese Lösung ausgeblendeten Spalten in .Net 2.0 zu simulieren:

Implementieren Sie die GridView.RowCreated Ereignis.

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
    e.Row.Cells[1].Visible = false;
    e.Row.Cells[2].Visible = false;
}

Hier ist der Link: http://www.beansoftware.com/ASP.NET-Tutorials/GridView -hidden-Column.aspx

Ich denke, in 2.0, wenn eine Spalte nicht sichtbar ist die Datenbindung für diese Spalte nicht aber diese Methode versteckt, nachdem die Verbindung hergestellt wurde, so dass es Tricks, um das Systems (?).

Andere Tipps

Microsoft mit der DataKeyNames empfiehlt Immobilien des Gridview-Steuerelement.

Anstelle die Verwendung von Code-Behind bestimmte Spalten zu verstecken, kann man einfach die gebundenen Felder aus der Gridview entfernen und sie in der DataKeyNames Eigenschaft angeben:

<asp:GridView ID="GridView1" runat="server" 
        DataKeyNames="SalesOrderID,SalesOrderDetailID"
        DataSourceID="LinqDataSource1">

Auf diese Weise die Felder werden dem Benutzer nicht zeigen, aber die Gridview kennt die Werte zu halten, um für die Aktualisierung, etc.

Wenn Sie dies nicht bereits tun, halte ich würde Template Spalten für Ihre Daten mit und tue „manuell“ Datenbindung (entweder „inline“ oder in der Code-behind-Seite des RowDataBound Ereignis verwenden). Auf diese Weise können Sie für DBNull testen und einfach einen Wert in der Spalte ignorieren setzen, wenn der Wert NULL ist. Dies wird auch ermöglicht die Spalten richtig versteckt werden.

Sie könnte es tun mit versteckten Feldern für die Werte, die Sie wollen nicht angezeigt werden soll. auf diese Weise können Sie immer noch die gleiche Datenbindung und andere Funktionen nutzen, wie Sie es heute tun.

Wenn ein Feld in Gridview unsichtbar gemacht wird, sind die Zellenwerte nicht mehr zugegriffen werden kann oder diese sind null oder leer.

Um dieses Problem zu lösen, müssen Sie nur die Spaltennamen (Versteckt Felder) zu DataKeyNames Eigenschaft Gridview zuweisen, indem DataKeyNames="colName1,colName2,colName3" tun.

Dann Zugriff auf ihre Zellenwerte als cellValue = GridView1.DataKeys[0]["ID"].ToString();

Ich habe eine einfache Post demonstriert die Lösung für Ihr Problem unter hier .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top