c# - 回发asp.net后如何在gridview中保持状态
问题描述
我的程序运行良好,页面加载后我的 gridview 加载等,但我遇到的问题是,当我单击编辑功能上的编辑并输入新值并按更新时,我的程序进入空白屏幕,直到我选择再次从我的下拉列表中获取产品,它正在更新数据库,但我希望它在单击更新后保持其状态并保持在同一页面上。这是我的代码。
public partial class Default : Page
{
private int Target { get; set; }
private string ProductShortDesc { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (ddlproduct.Items.Count == 0)
{
BindDropDownList();
RefreshGrid(ProductShortDesc);
}
}
}
private void BindDropDownList()
{
{
try
{
string[] productTexts;
string[] productValues;
BusinessManager biz = new BusinessManager();
biz.GetProductSeriesList(out productTexts, out productValues);
ddlproduct.Items.Clear();
int x = 0;
foreach (string s in productTexts)
{
ListItem li = new ListItem(s, productValues[x]);
x++;
ddlproduct.Items.Add(li);
}
}
catch (SqlException ex)
{
throw new Exception("Failed to get product items", ex);
}
catch (Exception ex)
{
throw new Exception("Failed to get product items:", ex);
}
}
}
protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
ProductShortDesc = ddlproduct.SelectedValue;
RefreshGrid(ProductShortDesc);
}
public void RefreshGrid(string productShortDesc)
{
try
{
// get the list of records & bind to the grid
BusinessManager biz = new BusinessManager();
ProductShortDesc = ddlproduct.SelectedValue;
DataTable dt = new DataTable();
dt = biz.GetPackingShiftData(ProductShortDesc);
GridView1.DataSource = dt.DefaultView;
GridView1.DataBind();
}
catch (SqlException ex)
{
throw new Exception("Could not populate the list due to an SQL error:", ex);
}
catch (Exception ex)
{
throw new Exception("Application error in adding products to the list:", ex);
}
}
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
// Assign Target property Value
try
{
TextBox tb =
(TextBox) GridView1.Rows[e.RowIndex].FindControl("TargetTextBox"); //finds the target column
Target = int.Parse((tb.Text));
int id = int.Parse(GridView1.DataKeys[e.RowIndex].Value.ToString());
using (DataManager dmgr = new DataManager())
{
dmgr.Connect("PRODUCTION");
dmgr.PackingShiftTargetUpdate(id, Target);
dmgr.Disconnect();
}
GridView1.EditIndex = -1;
DataBind();
}
catch (SqlException msg)
{
throw new Exception("Input error:", msg);
}
catch (Exception ex)
{
throw new Exception("Only a Number input is allowed:", ex);
}
}
protected void GridView1_OnRowEditing(object sender, GridViewEditEventArgs e)
{
try
{
RefreshGrid(ProductShortDesc);
GridView1.EditIndex = e.NewEditIndex;
DataBind();
}
catch (SqlException ex)
{
throw new Exception("Editing row error", ex);
}
catch (Exception ex)
{
throw new Exception("Application Error when editing application", ex);
}
}
protected void GridView1_OnRowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
try
{
//Reset the edit index.
GridView1.EditIndex = -1;
//Bind data to the GridView control.
DataBind();
}
catch (SqlException ex)
{
throw new Exception("error when editing row", ex);
}
catch (Exception ex)
{
throw new Exception("Application error when cancelling", ex);
}
}
protected void GridView1_OnRowUpdated(object sender, GridViewUpdatedEventArgs e)
{
GridView1.EditIndex = -1;
DataBind();
}
private void HandleSqlEx(SqlException ex, string Msg)
{
ExceptionLabel.ForeColor = Color.Red;
ExceptionLabel.Text = "SQL error:" + Msg;
}
private void HandleException(Exception ex, string Msg)
{
ExceptionLabel.ForeColor = Color.Red;
ExceptionLabel.Text = Msg;
}
}
}
解决方案
完成更新后在事件中调用您的RefreshGrid
方法。GridView1_RowUpdating
database
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
// Assign Target property Value
try
{
TextBox tb =
(TextBox) GridView1.Rows[e.RowIndex].FindControl("TargetTextBox"); //finds the target column
Target = int.Parse((tb.Text));
int id = int.Parse(GridView1.DataKeys[e.RowIndex].Value.ToString());
using (DataManager dmgr = new DataManager())
{
dmgr.Connect("PRODUCTION");
dmgr.PackingShiftTargetUpdate(id, Target);
dmgr.Disconnect();
}
GridView1.EditIndex = -1;
RefreshGrid(ProductShortDesc);
DataBind();
}
catch (SqlException msg)
{
throw new Exception("Input error:", msg);
}
catch (Exception ex)
{
throw new Exception("Only a Number input is allowed:", ex);
}
}
推荐阅读
- c++ - C ++如何在将原始数据转换为类对象时处理对齐填充
- ruby-on-rails - rails 控制器私有方法错误“找不到没有 ID 的专辑”
- c - 使用scanf而不在C中分配数组
- javascript - 如何同时映射 React 中的两个数组?
- node.js - UDP上的流管道在nodejs上不存在
- flutter - 消费者包含以前的值而不是新值
- python - 当密钥存在且有效时,Python dict.get() 抛出 KeyError
- android - 如何创建一个通过 NFC 读取 URL 的 Android 应用程序?
- npm - 使“http-server”在整个网络中可见
- c++ - 使用 strchr 的作业问题给了我意想不到的输出