Witam
Mam następujący problem, dość dziwny.
Pisze stronę w ASP.NET z użyciem .Net Framework 3.5 SP1
Mam na niej UpdatePanel a na nim GridView z kilkoma kolumnami i wlaczonym guzikiem edycji. Jako DataSource podpiety wynik zapytania L2S.
Dokonuje Edycji danych w Event RowUpdating. Dane zostaja zmienione w bazie danych (jest to kilka kolumn). Update odbywa sie oczywiscie przy pomocy L2S.
W tym też evencie wykonuje ponownego przypisania DataSource i DataBind. Niestety mimo, że w bazie danych wartosci już są zmienione to nadal w gridzie pojawiaja się stare (nieodświeżone). Probowałem tez metody UpdatePanel(), nic nie pomoglo.
Najzabawniejsze, że mam druga stronę w której jest wszystko identycznie z tym, że do updatu jest brana tylko jedna kolumna i tam bez problemu następuje odświeżenie danych w Grid.
Proszę o jakieś sugestie co można jeszcze z tym zrobić?
<asp:ScriptManager ID="smGlowny" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="upUzytkownicy" runat="server">
<ContentTemplate>
<asp:GridView ID="gvListaUzytkownikow" runat="server"
AutoGenerateColumns="False"
onrowcancelingedit="gvListaUzytkownikow_RowCancelingEdit"
onrowediting="gvListaUzytkownikow_RowEditing"
onrowupdating="gvListaUzytkownikow_RowUpdating"
>
<Columns>
<asp:TemplateField HeaderText="Nazwa">
<EditItemTemplate>
<asp:UpdateProgress ID="upIndicator" runat="server" DisplayAfter="0">
<ProgressTemplate>
<asp:Image ID="Image1" runat="server" ImageUrl="~/Image/indicator.gif"/>
</ProgressTemplate>
</asp:UpdateProgress>
<asp:HiddenField ID="edIdUzytkownika" runat="server" Value='<%# Bind("ID_UZYTKOWNIKA") %>' />
<asp:TextBox ID="edLogin" runat="server" Text='<%# Bind("UZYTK_LOGIN") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:HiddenField ID="lbIdUzytkownika" runat="server" Value='<%# Bind("ID_UZYTKOWNIKA") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Wymuś zmianę hasła">
<EditItemTemplate>
<asp:CheckBox ID="edZmianaHasla" runat="server"
Checked='<%# Bind("WYMUS_ZMIANE_HASLA") %>'></asp:CheckBox>
</EditItemTemplate>
<ItemTemplate>
<asp:CheckBox ID="lbZmianaHasla" runat="server"
Checked='<%# Bind("WYMUS_ZMIANE_HASLA") %>' Enabled="false"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField HeaderText="Akcja" CancelText="Anuluj" EditText="Edytuj" ShowEditButton="True"
UpdateText="Zapisz" />
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
CodeBehind:
protected void Page_Load(object sender, EventArgs e)
{
var Lista = Uzytk.ZwrocListe();
gvListaUzytkownikow.DataSource = Lista;
if (!IsPostBack)
{
gvListaUzytkownikow.DataBind();
}
}
protected void gvListaUzytkownikow_RowEditing(object sender, GridViewEditEventArgs e)
{
gvListaUzytkownikow.EditIndex = e.NewEditIndex;
gvListaUzytkownikow.DataBind();
}
protected void gvListaUzytkownikow_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
var row = gvListaUzytkownikow.Rows[e.RowIndex];
cUzytkownik UzytkUpdate = new cUzytkownik();
UzytkUpdate.Id_Uzytkownika = System.Convert.ToInt32(((HiddenField)row.FindControl("edIdUzytkownika")).Value);
UzytkUpdate.Login = ((TextBox)row.FindControl("edLogin")).Text;
UzytkUpdate.WymusZmianeHasla = ((CheckBox)row.FindControl("edZmianaHasla")).Checked;
upUzytkownicy.UpdateMode = UpdatePanelUpdateMode.Conditional;
cUzytkownicy U = new cUzytkownicy();
try
{
U.Update(UzytkUpdate); //Procedura do zmiany danych w bazie, przy pomocy L2S
}
finally
{
gvListaUzytkownikow.EditIndex = -1;
var Lista = Uzytk.ZwrocListe(); //Metoda zwraca wynik zapytania L2S (select na tabeli)
gvListaUzytkownikow.DataSource = Lista;
gvListaUzytkownikow.DataBind();
upUzytkownicy.Update();
}
}
protected void gvListaUzytkownikow_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
gvListaUzytkownikow.EditIndex = -1;
gvListaUzytkownikow.DataBind();
}