| 

.NET C# Java Javascript Exception

4
Mein Ziel:
Ich möchte in einer asp.net Seite ein Gridview haben, welches zur Laufzeit an Daten gebunden wird und sortierbare Spalten hat, die im Header mit kleinen Grafiken oder auch erstmal nur Farben ausgestattet sind, die die sortierte Spalte und die Richtung anzeigen.
Mein Problem:
Nachdem ich die Sortierung erfolgreich implementiert habe, bekomme ich die grafische Kennzeichnung der Spaltensortierung nicht zum Laufen. Ich habe diverse Artikel gefunden, die die Eigenschaften SortedDescendingHeaderStyle bzw. SortedAscendingHeaderStyle erläutern, zB:
http://www.4guysfromrolla.com/articles/020310-1.aspx, dies funktioniert jedoch nicht. Im HTML der erzeugten Seite finde ich die von mir erwünschten css-Klassen oder Hintergrundfarben niemals wieder.

Laut Artikel gibt es Eigenschaften, die direkt im GridView Tag zu verwenden sind wie:
    SortedAscendingHeaderStyle-BackColor="Green"

Andererseits gibt es auch Eigenschaften des Grids die als eigenständige Tags zwischen <GridView></GridView> eingetragen werden. Ich habe alles versucht, es funktioniert nicht.

Markup
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
AllowSorting="True" EnableSortingAndPagingCallbacks="False"
onsorting="GridView1_Sorting"
SortedAscendingHeaderStyle-BackColor="Green"
SortedDescendingHeaderStyle-CssClass="sortdesc-header" >...</GridView>


cs:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack) initData();
}

private void initData()
{
SqlConnection cn;
SqlDataAdapter da;
SqlCommand cmd;
DataTable dt;

dt =new DataTable();
cn = new SqlConnection(appConn);
cmd = new SqlCommand("select * from v_WF_MSDS", cn);
da = new SqlDataAdapter(cmd);
da.Fill(dt);

Session["DataTable"] = dt;
GridView1.DataSource = Session["DataTable"];
GridView1.DataBind();
}

protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
DataTable dataTable = Session["DataTable"] as DataTable;
if (dataTable != null)
{
dataTable.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression);
GridView1.DataSource = Session["DataTable"];
GridView1.DataBind();
}
}
News:
25.05.2011
Magier77 238 1 6
Kann mir hier wirklich niemand helfen?
Magier77 30.05.2011
Hallo,

hat das nicht geklappt mit den 100 Punkten, weil ich keine positive Bewertung bekommen habe? Und viel wichtiger: Hat Dir meine Antwort in irgendeiner Weise geholfen?

Gruß
LutzJ 11.08.2011
Auf die Beantwortung dieser Frage war ein Kopfgeld in Höhe von 100 Reputationspunkten ausgesetzt. Das Kopfgeld wurde bereits vergeben.
1 Antwort
1
Hallo,

das ist leider sehr häufig der Fall, wenn man deklarativen Code mit Codebehind mischt, dass einige Aspekte nicht mehr funktionieren. Ich vermute mal, dass der interpreter des deklarativen Code nicht mitbekommt, dass das Grid nun in einem sortierten Zustand vorliegt, weil Du es im codebehind sortierst.

Das bedeutet, dass Du das Markieren der Zeile ebenfalls in den Codebehind auslagern musst.

Ich denke Du musst das Event GridView1_RowCreated eingreifen und mit e.Rows.Cells[IndexOfSortingCell] die Spalte einzelnd anpassen. Die Spalte musst Du Dir natürlich vorher im Sorting Event merken.

Gruß
03.08.2011
LutzJ 1,3k 1 8
Sorry für die späte Rückmeldung. Danke!
Magier77 29.09.2011

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH