Данные в моем GridView внутри UpdatePanel не синхронизируются с базой данных, и я не могу понять, почему.Это привело к неправильным обновлениям базы данных, которые я должен быстро исправить!Кто-нибудь может помочь?
У меня есть несколько UpdatePanels с GridViews внутри, которые могут быть отредактированы пользователем.Есть функция поиска и кнопки фильтра, которые выбирают запрашиваемые данные из базы данных и отображают в GridView.Сортировка включена, и "несинхронность" возникает в основном при сортировке и последующем редактировании поля.
Данные поступают из базы данных SQL.Я могу обновить данные напрямую через опцию OnTextChange моего TemplateField следующим образом:
<asp:GridView
ID="GridView4"
runat="server"
OnSorting="TaskGridView_Sorting"
AllowSorting="True"
Width="100%" >
<Columns>
<asp:TemplateField SortExpression="name" HeaderText="Name">
<HeaderStyle HorizontalAlign="Left" CssClass="col_name" />
<ItemTemplate>
<asp:TextBox ID="name" AutoPostBack="True" CssClass="col_name" runat="server" Text='<%# Eval("name") %>' Width=180 OnTextChanged="text_change" />
</ItemTemplate>
</asp:TemplateField>
...
У меня есть вид сетки внутри UpdatePanel, который имеет следующие опции:
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
...
Я включил частичный рендерингкак это:
<ajaxToolKit:ToolkitScriptManager EnablePartialRendering="true" runat="server" />
У меня есть кнопки, которые фильтруют данные, запрашивая базу данных и отображая только отфильтрованные данные, как это:
DataGrid_Load(DAL.Search_reg_log(OrgText.Text, searchText, searchCol), "reg");
В gridview загружаются данные следующим образом:
private void DataGrid_Load(DataTable command, string type)
{
DataTable dataTable = new DataTable();
dataTable = command;
string sortDir = ViewState["SortDirection"] as string;
string sortExp = ViewState["SortExpression"] as string;
if(ViewState["SortExpression"] != null)
{
dataTable = resort(dataTable, sortExp, sortDir);
}
try
{
var query = from c in dataTable.AsEnumerable()
where c.Field<string>("status") == "Invoiced" && c.Field<string>("reg_cat_id") != "Archive"
|| c.Field<string>("status") == "Confirmed" && c.Field<string>("reg_cat_id") != "Archive"
select c ;
if(query.Any()){
DataTable t2 = query.CopyToDataTable();
GridView4.DataSource = t2;
GridView4.DataBind();
} else {
GridView4.DataSource = new DataTable();
GridView4.DataBind();
}
}
catch(Exception e) {
ErrorText.Text = "Caught Exception: " + e;
}
...
Я выделил одну причину ошибок данных, которая возникает после сортировки столбца, а затем
protected void TaskGridView_Sorting(object sender, GridViewSortEventArgs e)
{
string sortExp = ViewState["SortExpression"] as string;
string sortDir = ViewState["SortDirection"] as string;
if(sortDir == "asc" & sortExp == e.SortExpression.ToString())
ViewState["SortDirection"] = "desc";
else
ViewState["SortDirection"] = "asc";
ViewState["SortExpression"] = e.SortExpression.ToString();
if(searchCol != "" && searchText != "")
DataGrid_Load(DAL.Search_reg_log(OrgText.Text, searchText, searchCol), "reg");
else
DataGrid_Load(DAL.reg_log(HeadText.Text, OrgText.Text), "reg");
UpdatePanels();
}
Вот функция курорта:
public static DataTable resort(DataTable dt, string colName, string direction)
{
dt.DefaultView.Sort = colName + " " + direction;
dt = dt.DefaultView.ToTable();
return dt;
}
Пожалуйста, помогите с некоторыми направлениями того, что может быть причиной этого.