【发布时间】:2019-04-25 14:06:16
【问题描述】:
UpdatePanel 内的 GridView 中的数据与数据库不同步,我不知道为什么。这导致数据库更新不正确,我必须迅速修复!任何人都可以帮忙吗?
我有多个 UpdatePanel,其中包含用户可以编辑的 GridView。有一个搜索功能和过滤按钮,可以从数据库中选择查询的数据并显示在 GridView 中。启用了排序,并且“不同步”主要发生在排序然后编辑字段时。
数据来自 SQL 数据库。我可以通过我的 TemplateField 的 OnTextChange 选项直接更新数据,如下所示:
<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;
}
请就可能导致此问题的一些方向提供帮助。
【问题讨论】:
-
有人对赏金感兴趣吗?
标签: asp.net gridview updatepanel