Witam.
Mam problem z sortowaniem gridview poprzez updatepanel.
Mam updatepanel:
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="DropDownList2" EventName="SelectedIndexChanged" />
<asp:AsyncPostBackTrigger ControlID="GridView1" EventName="SelectedIndexChanging" />
<asp:AsyncPostBackTrigger ControlID="GridView1" EventName="Sorting" />
<asp:AsyncPostBackTrigger ControlID="DropDownList1" EventName="SelectedIndexChanged" />
</Triggers>
<ContentTemplate>
<asp:GridView ID="GridView1" runat="server" AllowSorting="True"
BackColor="#FFFFCC" Width="100%" AutoGenerateSelectButton="True"
BorderWidth="1px" EnableSortingAndPagingCallbacks="True"
onselectedindexchanging="GridView1_SelectedIndexChanging"
onselectedindexchanged="GridView1_SelectedIndexChanged"
onsorting="GridView1_Sorting" onsorted="GridView1_Sorted">
<Columns>
<asp:BoundField DataField="nazwa_dysku" HeaderText="Nazwa Dysku"
SortExpression="nazwa_dysku" />
<asp:BoundField DataField="folder" HeaderText="Folder"
SortExpression="folder" />
<asp:BoundField DataField="nazwa_pliku" HeaderText="Nazwa Pliku"
SortExpression="nazwa_pliku" />
<asp:BoundField DataField="czas_trwania" HeaderText="Czas trwania"
SortExpression="czas_trwania" />
<asp:BoundField DataField="rozmiar" HeaderText="Rozmiar"
SortExpression="rozmiar" />
<asp:BoundField DataField="data_utworzenia" HeaderText="Data utworzenia"
SortExpression="data_utworzenia" />
<asp:BoundField DataField="data_modyfikacji" HeaderText="Data modyfikacji"
SortExpression="data_modyfikacji" />
<asp:BoundField DataField="sciezka" HeaderText="Lokalizacja"
SortExpression="sciezka" />
</Columns>
<HeaderStyle BackColor="#9A6E71" Font-Size="Medium" />
<SelectedRowStyle BackColor="Red" />
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
I kod go obsługujący:
public bool dane(int numerdysku)
{
string connectionString = "data source=localhost ;initial catalog=archiwizacjatvs;user id=user;password=password";
MySqlConnection conn = new MySqlConnection(connectionString);
try
{
conn.Open();
MySqlDataAdapter dadapter = new MySqlDataAdapter("select nazwa_dysku,folder,nazwa_pliku,czas_trwania,rozmiar,data_utworzenia,data_modyfikacji,sciezka from archiwum where nazwa_dysku='" + DropDownList2.SelectedValue.ToString() + "'", conn);
DataSet ds = new DataSet();
dadapter.Fill(ds);
DataTable tablica = new DataTable();
dadapter.Fill(tablica);
DataTableReader datatablereader = tablica.CreateDataReader();
if (tablica.Rows.Count > 0)
{
GridView1.DataSource = tablica;
GridView1.DataBind();
Session["TaskTable"] = tablica;
}
conn.Close();
}
catch (Exception ex)
{
TextBox2.Text = ex.ToString();
}
return true;
}
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
DataTable dt = Session["TaskTable"] as DataTable;
if (dt != null)
{
dt.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression);
GridView1.DataSource = Session["sess_table"];
GridView1.DataBind();
UpdatePanel2.Update();
}
}
private string GetSortDirection(string column)
{
TextBox2.Text = "Uruchamiam sortdirection";
// By default, set the sort direction to ascending.
string sortDirection = "ASC";
// Retrieve the last column that was sorted.
string sortExpression = ViewState["SortExpression"] as string;
if (sortExpression != null)
{
// Check if the same column is being sorted.
// Otherwise, the default value can be returned.
TextBox2.Text = "Sort expression nie jest pusty! Sortowana kolumna to:" + column;
if (sortExpression == column)
{
string lastDirection = ViewState["SortDirection"] as string;
if ((lastDirection != null) && (lastDirection == "ASC"))
{
sortDirection = "DESC";
}
}
}
// Save new values in ViewState.
ViewState["SortDirection"] = sortDirection;
ViewState["SortExpression"] = column;
return sortDirection;
}
Zasada działania:
- Użytkownik dropdownlist wybiera sobie numer dysku jaki chce przejrzeć z bazy danych. Zawartość dysku jest dynamicznie wyświetlana w updatepanelu. Status: działa.
- Użytkownik chciałbym posortować wyniki według określonych kryteriów. W tym momencie powinien zrobić to na tym samym gridview. No i w moim kodzie kiedy kliknie na jakąkolwiek rubrykę to znika mi gridview. Kod jest troszke zmieniony od tego:
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.sorting.aspx
No i działa. Jednak kiedy wkładam go w updatepanel i page_load zamieniam na wywołanie funkcji dane(int numerdysku) to już przestaje. Miałem podobny problem ale umieściłem dane w innym updatepanelu jednak nie chciałbym za bardzo mieszać w kodzie. Jakieś sugestie?