C# 通过asp.net中的“保存”按钮将数据绑定到gridview后,刷新页面时触发“保存”按钮单击事件
我正在使用C#和ASP.NET开发一个web应用程序。我通过同一页面中的文本框将数据绑定到gridview,并在“保存”按钮单击事件中编写了绑定方法 现在,当我通过“save”C# 通过asp.net中的“保存”按钮将数据绑定到gridview后,刷新页面时触发“保存”按钮单击事件,c#,asp.net,gridview,buttonclick,C#,Asp.net,Gridview,Buttonclick,我正在使用C#和ASP.NET开发一个web应用程序。我通过同一页面中的文本框将数据绑定到gridview,并在“保存”按钮单击事件中编写了绑定方法 现在,当我通过“save”按钮\u click事件将数据从文本框保存到gridview时,发现grid视图再次与重复行绑定,这真的很奇怪。我曾尝试在firefox、chrome和IE8上加载该页面……但结果是否定的 有谁能告诉我为什么会发生这种情况,并指导我解决它 这是我的C#代码: 受保护的无效页面加载(对象发送方、事件参数e) { 任何人都可以
按钮\u click
事件将数据从文本框保存到gridview时,发现grid视图再次与重复行绑定,这真的很奇怪。我曾尝试在firefox、chrome和IE8上加载该页面……但结果是否定的
有谁能告诉我为什么会发生这种情况,并指导我解决它
这是我的C#代码:
受保护的无效页面加载(对象发送方、事件参数e)
{
任何人都可以帮助我…提前谢谢..这是一个常见问题。请检查类似的SO问题:
if (!IsPostBack)
{
Bind(); //bind data to grid
}
如果只需几句话,web浏览器刷新按钮就会将最后一个请求发送到服务器,这是一个“保存”按钮单击事件
,因此它会给出重复的行。使用这种方式,最后一个请求将只是导航到页面,因此刷新不会产生不希望的效果
已编辑
我看到您添加了一些代码。这里有一个解决方法。您正在将数据保存到数据库这一事实非常有帮助。页面加载事件的第一件事不需要检查页面是否为回发,只需调用bindassets(“,”);
方法即可
至于保存按钮点击事件。无需调用bindassets(“,”);
它将从页面加载中调用
protected void btnsaveasset_Click(object sender, EventArgs e)
{
if (txtdescription.Text != "" && txtdtrecieved.Text != "" && txtcost.Text != "" && txtmodelno.Text != "" && txtquantity.Text != "")
{
try
{
string desc= txtdescription.Text;
DateTime dtrecd = Convert.ToDateTime(txtdtrecieved.Text);
string cost = txtcost.Text;
string modelno = txtmodelno.Text;
double quantity = Convert.ToDouble(txtquantity.Text);
SqlConnection sqlcon = new SqlConnection(con);
sqlcon.Open();
string save = "Insert into Asset(Description,Recieveddate,cost,Modelno,Quantity)values(@desc,@date,@cost,@modelno,@quantity)";
SqlCommand cmd = new SqlCommand(save, sqlcon);
cmd.CommandType = CommandType.Text;
cmd.Parameters.Add("@desc", desc);
cmd.Parameters.Add("@date", dtrecd);
cmd.Parameters.Add("@cost", cost);
cmd.Parameters.Add("@modelno", modelno);
cmd.Parameters.Add("@quantity", quantity);
cmd.ExecuteNonQuery();
sqlcon.Close();
//bindassets("", "");
btnsaveasset.Enabled = false;
txtdescription.Text = "";
txtdtrecieved.Text = "";
txtcost.Text = "";
txtmodelno.Text = "";
txtquantity.Text = "";
lblErrMsg.Text = "data inserted successfully..";
}
catch
{
lblErrMsg.Text = "Please enter valid data and try again...";
}
}
else
{
lblErrMsg.Text = "Please enter valid data and try again...";
}
Response.Redirect("nameofpage.aspx", false);//does a charm. browser refresh button will repeat last action and from now on that's a Response.Redirect("nameofpage.aspx", false). thus no duplicate records
}
我已经这样做了…虽然我无法解决它…这就是我感到惊讶的地方…请让我知道解决它的任何其他方法…如果你能把你的一些代码,让我们可以理解,这将是很好的
if (!IsPostBack)
{
Bind(); //bind data to grid
}
protected void btnsaveasset_Click(object sender, EventArgs e)
{
if (txtdescription.Text != "" && txtdtrecieved.Text != "" && txtcost.Text != "" && txtmodelno.Text != "" && txtquantity.Text != "")
{
try
{
string desc= txtdescription.Text;
DateTime dtrecd = Convert.ToDateTime(txtdtrecieved.Text);
string cost = txtcost.Text;
string modelno = txtmodelno.Text;
double quantity = Convert.ToDouble(txtquantity.Text);
SqlConnection sqlcon = new SqlConnection(con);
sqlcon.Open();
string save = "Insert into Asset(Description,Recieveddate,cost,Modelno,Quantity)values(@desc,@date,@cost,@modelno,@quantity)";
SqlCommand cmd = new SqlCommand(save, sqlcon);
cmd.CommandType = CommandType.Text;
cmd.Parameters.Add("@desc", desc);
cmd.Parameters.Add("@date", dtrecd);
cmd.Parameters.Add("@cost", cost);
cmd.Parameters.Add("@modelno", modelno);
cmd.Parameters.Add("@quantity", quantity);
cmd.ExecuteNonQuery();
sqlcon.Close();
//bindassets("", "");
btnsaveasset.Enabled = false;
txtdescription.Text = "";
txtdtrecieved.Text = "";
txtcost.Text = "";
txtmodelno.Text = "";
txtquantity.Text = "";
lblErrMsg.Text = "data inserted successfully..";
}
catch
{
lblErrMsg.Text = "Please enter valid data and try again...";
}
}
else
{
lblErrMsg.Text = "Please enter valid data and try again...";
}
Response.Redirect("nameofpage.aspx", false);//does a charm. browser refresh button will repeat last action and from now on that's a Response.Redirect("nameofpage.aspx", false). thus no duplicate records
}