PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : GridView Sortieren


Durst
04.08.2008, 16:48
Hallo, ich habe da mal noch eine Frage. Ich weiß zwar das Gridviews ect. nicht gut sind, aber das ist in das Projekt schon eingebaut, und alles zu ändern wäre nun viel zu umständlich.

Ich habe eine Spalte namens "Fett" wo die Fettwerte der Artikel angegeben sind. Wenn ich n un auf "Fett" drücke werden alle Artikel aufsteigend nach dem Fettwert sortiert, es soll aber Absteigend Sortiert werden, wie mache ich das?

mfg


Peter Bucher
04.08.2008, 18:15
Hallo Durst

Wie kommst du darauf?
Nicht in allen Fällen ist das GridView optimal am Platz, vielfach ist ein Repeater gescheiter.

Zu deinem Problem, schau dir mal den <GridView>.Sorting Event an:
- http://msdn.microsoft.com/de-de/library/system.web.ui.webcontrols.gridview.sorting(VS.80).aspx


Gruss Peter

Durst
05.08.2008, 15:33
Vielen Dank, hab es hinbekommen, leider nicht mit der Hilfe des Links.

Ich habe noch eine weitere Frage an die Community , wenn ich per GridView Sortiere und z.b. wie in den oben genannten beispiel nach den Fettwerten Sortieren lasse, wie kann ich auslesen, dass ich nach "Fett" sortiert habe? also ich will entweder die ID oder den Index der Spalte (column) in einer Variable stehen haben.

mfg

Peter Bucher
05.08.2008, 16:57
Hallo Durst

Vielen Dank, hab es hinbekommen, leider nicht mit der Hilfe des Links.

Schön, und wie hast du es gelöst?



Ich habe noch eine weitere Frage an die Community , wenn ich per GridView Sortiere und z.b. wie in den oben genannten beispiel nach den Fettwerten Sortieren lasse, wie kann ich auslesen, dass ich nach "Fett" sortiert habe? also ich will entweder die ID oder den Index der Spalte (column) in einer Variable stehen haben.

Wie arbeitest du derzeit, zeig mal etwas Code.


Gruss Peter

Durst
06.08.2008, 08:31
Hallo,

so hab ich es gelöst:
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{

string sortExpression = e.SortExpression;

if (rdo_sort.SelectedIndex == 0 )
{

ZustandDerSortierung = SortDirection.Descending;

SortGridView(sortExpression, "DESC");

}

else if (rdo_sort.SelectedIndex == 1)
{

ZustandDerSortierung = SortDirection.Ascending;

SortGridView(sortExpression, "ASC");


}
} private void SortGridView(string sortExpression, string Sort_Richtung)
{
DataTable dt = DatenLaden().Tables[0];

DataView dv = new DataView(dt);

dv.Sort = sortExpression + " " + Sort_Richtung;


GridView1.DataSource = dv;

GridView1.DataBind();

}

hier werden die Daten aus der Datenbank ausgelesen und in das GridView eingetragen:

private DataSet DatenLaden()
{


SqlConnection SQL_Verbindung = new SqlConnection(DataClass.ConnectString); //Die Verbindung zur SQL Datenbank mit dem String aus der Web.config
SqlDataAdapter ad = new SqlDataAdapter(); //Neues Objekt der SqlDataAdapterklasse erstellen
//Ein SqlDataAdapter ist eine Verbindung zwischen dem Steuerelement und der Datenbank

SqlCommand sql_qry = new SqlCommand("SELECT DISTINCT CASE WHEN B.Bewertung IS NULL THEN 0 ELSE B.Bewertung END AS Bewertung, A.Artnr, A.Bezei, A.Bezei_Lang, Round(A.Fett,2) as Fett, Round(A.Eiweiss,2) as Eiweiss, Round(A.Kohlenhydrate,2) as Kohlenhydrate, A.GesEinwaage, A.FleischEinwaage, A.EKEinheit, A.EKEinheit_Inhalt, A.Basiseinheit, A.EKPreis, A.Schwein, A.Fisch, A.Rind, A.Vollkost, A.Leichtekost, A.Neu, A.GebindePreis, A.EinzelPreis, A.ImageURL, A.PRL_Liste, A.Diaet, A.Piccolino, B.Benutzer FROM VArtikel AS A INNER JOIN Bewertungen AS B ON A.Artnr = B.ArtNr WHERE (A.EinzelPreis <= 3.78) AND (B.Benutzer = @Benutzer OR B.Benutzer IS NULL) AND (A.Artnr BETWEEN @VonParam AND @BisParam) AND (A.Bezei LIKE N'%' + RTrim(@Filter) + N'%') UNION SELECT DISTINCT 0 AS Bewertung, A.Artnr, A.Bezei, A.Bezei_Lang, Round(A.Fett,2) as Fett, Round(A.Eiweiss,2) as Eiweiss , Round(A.Kohlenhydrate,2) as Kohlenhydrate, A.GesEinwaage, A.FleischEinwaage,A.EKEinheit, A.EKEinheit_Inhalt, A.Basiseinheit, A.EKPreis, A.Schwein, A.Fisch, A.Rind, A.Vollkost, A.Leichtekost, A.Neu, A.GebindePreis, A.EinzelPreis, A.ImageURL, A.PRL_Liste, A.Diaet, A.Piccolino, '' AS Expr1 FROM VArtikel AS A WHERE (A.EinzelPreis <= 3.75) AND (Artnr BETWEEN @VonParam AND @BisParam) AND (Artnr NOT IN (SELECT ArtNr FROM Bewertungen AS B WHERE (Benutzer = @Benutzer))) AND (A.Bezei LIKE N'%' + RTrim(@Filter) + N'%') OR (A.Bezei_Lang LIKE N'%' + Rtrim(@Filter)+ N'%') AND (A.EinzelPreis <= 3.75) AND (Artnr BETWEEN @VonParam AND @BisParam) AND (Artnr NOT IN (SELECT ArtNr FROM Bewertungen AS B WHERE (Benutzer = @Benutzer))) ORDER BY Bewertung DESC, A.Artnr,A.Einzelpreis", SQL_Verbindung);

//C# Variablen in den SQL Select festlegen
sql_qry.Parameters.Add(new SqlParameter("@vonparam", SqlDbType.VarChar, 255)).Value = "0000";
sql_qry.Parameters.Add(new SqlParameter("@bisparam", SqlDbType.VarChar, 255)).Value = "9999";
sql_qry.Parameters.Add(new SqlParameter("@Benutzer", SqlDbType.VarChar, 255)).Value = Environment.UserName.ToString();
sql_qry.Parameters.Add(new SqlParameter("@Filter", SqlDbType.VarChar, 255)).Value = edFilter.Text;
ad.SelectCommand = sql_qry; //Der SqlDataAdapter soll sql_qry absenden

DataSet ds = new DataSet(); //Erstellt ein Objekt der Klasse DataSet

ad.Fill(ds); //Füllt die Daten aus dem SqlDataAdapter in das DataSet 'ds'

GridView1.DataSource = ds; //Die Daten werden aus dem DataSet geladen

GridView1.DataBind(); //Bindet die Daten ein und zeigt sie an

return ds; //sollte glaub ich jeder selber verstehen :P

}und hier is das GridView im ASP
<asp:GridView ID="GridView1" runat="server" AllowPaging="True"
AutoGenerateColumns="False" CellPadding="4" OnSorting="GridView1_Sorting"
DataKeyNames="Artnr" ForeColor="#333333"
GridLines="None" AllowSorting="True" PageSize="<%#AnzahlProPage%>"

onpageindexchanging="GridView1_PageIndexChanging">
<PagerSettings PageButtonCount="15" Position="TopAndBottom" />
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<Columns>
<asp:TemplateField HeaderText="Menüs" SortExpression="Benutzer">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Benutzer") %>'></asp:TextBox>
</EditItemTemplate>
<AlternatingItemTemplate>
<table style="width: 600px">
<tr>
<td style="width: 152px; height: 152px">
<asp:Image ID="Image1" runat="server" ImageUrl='<%# Eval("ImageURL") %>' Height="150px" Width="150px" BorderStyle="Groove" ImageAlign="Middle" OnPreRender="Image1_PreRender" /></td>
<td style="width: 609px; text-align: left;">
<asp:Label ID="ArtnrLabel" runat="server" Font-Bold="True" Font-Size="X-Large" ForeColor="Blue"
Text='<%# Eval("Artnr") %>'></asp:Label>
<asp:Label ID="BezeiLabel" runat="server" ForeColor="#C04000" Text='<%# Eval("Bezei") %>'></asp:Label><br />
<asp:Label ID="Bezei_LangLabel" runat="server" ForeColor="#C04000" Text='<%# Eval("Bezei_Lang") %>'></asp:Label><br />
Gesamteinwaage:
<asp:Label ID="GesEinwaageLabel" runat="server" Text='<%# Eval("GesEinwaage") %>'></asp:Label>&nbsp;
Fleischeinwaage:
<asp:Label ID="FleischEinwaageLabel" runat="server" Text='<%# Eval("FleischEinwaage") %>'></asp:Label><br />
Stückpreis:
<asp:Label ID="EKPreisLabel" runat="server" Font-Bold="True" Font-Size="X-Large"
Font-Underline="True" ForeColor="#C00000" Text='<%# Eval("Einzelpreis", "{0:C}") %>'></asp:Label>&nbsp;
Gebindepreis:
<asp:Label ID="GebindePreisLabel" runat="server" Font-Italic="True" Font-Size="X-Large"
Font-Underline="True" ForeColor="Blue" Style="padding-right: 3px; padding-left: 3px;
border-left-color: lime; border-bottom-color: lime; border-top-color: lime; border-right-color: lime"
Text='<%# Eval("GebindePreis", "{0:C}") %>'></asp:Label><br />
<table cellpadding="4" cellspacing="2" style="font-size: 12pt">
<tr>
<td style="width: 100px">
Bewertung:
<asp:Label ID="Label1" runat="server" BackColor="#FFE0C0" BorderColor="#FF8000" BorderStyle="Outset"
BorderWidth="4px" CssClass="Boxed" Font-Bold="True" Font-Overline="False" Font-Size="X-Large"
Font-Strikeout="False" ForeColor="Red" Text='<%# Eval("Bewertung") %>'></asp:Label>
</td>
<td style="width: 180px; text-align: center">
<asp:Button ID="Button0" runat="server" CommandArgument='<%# Eval("Artnr") %>' OnCommand="Button_Command"
Text="X" Width="20px" Font-Bold="True" ForeColor="Red" />&nbsp; &nbsp;<asp:Button ID="Button1" runat="server" CommandArgument='<%# Eval("Artnr") %>' OnCommand="Button_Command"
Text="1" Width="20px" />
<asp:Button ID="Button2" runat="server" CommandArgument='<%# Eval("Artnr") %>' OnCommand="Button_Command"
Text="2" Width="20px" />
<asp:Button ID="Button3" runat="server" CommandArgument='<%# Eval("Artnr") %>' OnCommand="Button_Command"
Text="3" Width="20px" />
<asp:Button ID="Button4" runat="server" CommandArgument='<%# Eval("Artnr") %>' OnCommand="Button_Command"
Text="4" Width="20px" />
<asp:Button ID="Button5" runat="server" CommandArgument='<%# Eval("Artnr") %>' OnCommand="Button_Command"
Text="5" Width="20px" /></td>
</tr>
</table>
<strong><span style="font-size: 16pt; color: highlight"></span></strong>
</td>
</tr>
</table>
</AlternatingItemTemplate>
<ItemTemplate>
<table style="width: 600px">
<tr>
<td style="width: 152px; height: 152px">
<asp:Image ID="Image1" runat="server" ImageUrl='<%# Eval("ImageURL") %>' Height="150px" Width="150px" BorderStyle="Groove" ImageAlign="Middle" OnPreRender="Image1_PreRender" /></td>
<td style="width: 609px; text-align: left;">
<asp:Label ID="ArtnrLabel" runat="server" Font-Bold="True" Font-Size="X-Large" ForeColor="Blue"
Text='<%# Eval("Artnr") %>'></asp:Label>
<asp:Label ID="BezeiLabel" runat="server" ForeColor="#C04000" Text='<%# Eval("Bezei") %>'></asp:Label><br />
<asp:Label ID="Bezei_LangLabel" runat="server" ForeColor="#C04000" Text='<%# Eval("Bezei_Lang") %>'></asp:Label><br />
Gesamteinwaage:
<asp:Label ID="GesEinwaageLabel" runat="server" Text='<%# Eval("GesEinwaage") %>'></asp:Label>&nbsp;
Fleischeinwaage:
<asp:Label ID="FleischEinwaageLabel" runat="server" Text='<%# Eval("FleischEinwaage") %>'></asp:Label><br />
Stückpreis:
<asp:Label ID="EKPreisLabel" runat="server" Font-Bold="True" Font-Size="X-Large"
Font-Underline="True" ForeColor="#C00000" Text='<%# Eval("Einzelpreis", "{0:C}") %>'></asp:Label>&nbsp;
Gebindepreis:
<asp:Label ID="GebindePreisLabel" runat="server" Font-Italic="True" Font-Size="X-Large"
Font-Underline="True" ForeColor="Blue" Style="padding-right: 3px; padding-left: 3px;
border-left-color: lime; border-bottom-color: lime; border-top-color: lime; border-right-color: lime"
Text='<%# Eval("GebindePreis", "{0:C}") %>'></asp:Label><br />
<table cellpadding="4" cellspacing="2" style="font-size: 12pt">
<tr>
<td style="width: 100px">
Bewertung:
<asp:Label ID="Label1" runat="server" BackColor="#FFE0C0" BorderColor="#FF8000" BorderStyle="Outset"
BorderWidth="4px" CssClass="Boxed" Font-Bold="True" Font-Overline="False" Font-Size="X-Large"
Font-Strikeout="False" ForeColor="Red" Text='<%# Eval("Bewertung") %>'></asp:Label>
</td>
<td style="width: 180px; text-align: center">
<asp:Button ID="Button0" runat="server" CommandArgument='<%# Eval("Artnr") %>' OnCommand="Button_Command"
Text="X" Width="20px" Font-Bold="True" ForeColor="Red" />&nbsp; &nbsp;<asp:Button ID="Button1" runat="server" CommandArgument='<%# Eval("Artnr") %>' OnCommand="Button_Command"
Text="1" Width="20px" />
<asp:Button ID="Button2" runat="server" CommandArgument='<%# Eval("Artnr") %>' OnCommand="Button_Command"
Text="2" Width="20px" />
<asp:Button ID="Button3" runat="server" CommandArgument='<%# Eval("Artnr") %>' OnCommand="Button_Command"
Text="3" Width="20px" />
<asp:Button ID="Button4" runat="server" CommandArgument='<%# Eval("Artnr") %>' OnCommand="Button_Command"
Text="4" Width="20px" />
<asp:Button ID="Button5" runat="server" CommandArgument='<%# Eval("Artnr") %>' OnCommand="Button_Command"
Text="5" Width="20px" /></td>
</tr>
</table>
<strong><span style="font-size: 16pt; color: highlight"></span></strong>
</td>
</tr>
</table>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="GesEinwaage" HeaderText="Ges. Einwaage" SortExpression="GesEinwaage" DataFormatString="{0} g" >
<ItemStyle Font-Bold="True" Font-Size="X-Large" ForeColor="Green" />
</asp:BoundField>
<asp:BoundField DataField="FleischEinwaage" HeaderText="Fleisch Einwaage" SortExpression="FleischEinwaage" DataFormatString="{0} g" >
<ItemStyle Font-Bold="True" Font-Size="X-Large" ForeColor="DarkSalmon" />
</asp:BoundField>
<asp:BoundField DataField="Fett" HeaderText="Fett" SortExpression="Fett" DataFormatString="{0} g" >
<ItemStyle Font-Bold="True" Font-Size="X-Large" ForeColor="DarkSalmon" />
</asp:BoundField>
<asp:BoundField DataField="Kohlenhydrate" HeaderText="Kohlenhydrate" SortExpression="Kohlenhydrate" DataFormatString="{0} g" >
<ItemStyle Font-Bold="True" Font-Size="X-Large" ForeColor="DarkSalmon" />
</asp:BoundField>
<asp:BoundField DataField="Eiweiss" HeaderText="Eiweiss" SortExpression="Eiweiss" DataFormatString="{0} g" >
<ItemStyle Font-Bold="True" Font-Size="X-Large" ForeColor="DarkSalmon" />
</asp:BoundField>
</Columns>
<SelectedRowStyle BackColor="#E2DED6" ForeColor="#333333" Font-Bold="True" />
<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<EditRowStyle BackColor="#999999" />
</asp:GridView>



mfg

Durst
06.08.2008, 10:34
Hi, ich habe es schon herausgefunden wie es geht.
hier der Code:

static public int GetColumnIndexByDBName(GridView GridView1, String ColumnText)
{
System.Web.UI.WebControls.BoundField DataColumn;

for (int Index = 0; Index < GridView1.Columns.Count; Index++)
{
DataColumn = GridView1.Columns[Index] as System.Web.UI.WebControls.BoundField;

if (DataColumn != null)
{
if (DataColumn.DataField == ColumnText)
return Index;
}
}
return 0;
}

protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{


string sortExpression = e.SortExpression;

if (rdo_sort.SelectedIndex == 0)
{

ZustandDerSortierung = SortDirection.Descending;

SortGridView(sortExpression, "DESC");

}

else if (rdo_sort.SelectedIndex == 1)
{

ZustandDerSortierung = SortDirection.Ascending;

SortGridView(sortExpression, "ASC");


}
string ColumnName = e.SortExpression;
int ColumnIndex = GetColumnIndexByDBName(sender as GridView, ColumnName);
// if (ColumnIndex == -1) ColumnIndex = 0;
MessageBox.Show(GridView1.Columns[ColumnIndex].HeaderText);

}

mfg