我正在尝试使用复选框的checkedchanged事件更新数据库中的位字段。当它被检查时,它发送1.当它被取消选中时,它发送一个0.现在我不知道为什么,但这些更改只在某些时候被保存。这会与“!IsPostBack”有什么关系吗?
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
using (SqlConnection connection = new SqlConnection(connectionString.ToString()))
{
connection.Open();
dataAdapter = new SqlDataAdapter("SELECT * FROM SecureOrders", connection);
dataSet = new DataSet();
dataAdapter.Fill(dataSet, "SecureOrders");
DataView source = new DataView(dataSet.Tables[0]);
DefaultGrid.DataSource = source;
DefaultGrid.DataBind();
connection.Close();
}
}
}
protected void CheckBoxProcess_CheckedChanged(object sender, EventArgs e)
{
bool update;
string checkedString = "UPDATE SecureOrders SET processed = 1 WHERE fName LIKE '%" + DefaultGrid.SelectedRow.Cells[2].Text + "%' AND lName LIKE '% " + DefaultGrid.SelectedRow.Cells[3].Text + "%'";
string uncheckedString = "UPDATE SecureOrders SET processed = 0 WHERE fName LIKE '%" + DefaultGrid.SelectedRow.Cells[2].Text + "%' AND lName LIKE '% " + DefaultGrid.SelectedRow.Cells[3].Text + "%'";
CheckBox cb = (CheckBox)sender;
GridViewRow gvr = (GridViewRow)cb.Parent.Parent;
DefaultGrid.SelectedIndex = gvr.RowIndex;
update = Convert.ToBoolean(DefaultGrid.SelectedValue);
orderByString = orderByList.SelectedItem.Value;
fieldString = searchTextBox.Text;
connectionString = rootWebConfig.ConnectionStrings.ConnectionStrings["secureodb"];
using (SqlConnection connection = new SqlConnection(connectionString.ToString()))
{
connection.Open();
SqlCommand checkedCmd = new SqlCommand(checkedString, connection);
SqlCommand uncheckedCmd = new SqlCommand(uncheckedString, connection);
if (cb.Checked == true)
{
checkedCmd.ExecuteNonQuery();
}
else
{
uncheckedCmd.ExecuteNonQuery();
}
connection.Close();
}
答案 0 :(得分:1)
我建议在DataView上将“EnableViewState”设置为false,然后将代码从if (!IsPostBack)
部分移动到页面的Pre_Init事件中。我认为这将解决您的问题,也可能有助于您的回发更快。
答案 1 :(得分:1)
!IsPostBack不是你的问题,无论我是否喜欢这种模式。然而,回发事件处理程序是一团糟。
通过使用各种测试用例逐步执行代码,您可以确定出错的地方。最终你会遇到触发问题的那个。
更好的选择是将SQL更新代码分离到自己的例程中并发送参数。这将减少移动部件的数量。唯一应该在主事件处理程序中的东西(这可以说是争论)是从Grid中获取变量。
如果是我,我还会考虑使用我的更新语句的键值,以免你在数据库中有两个James Smith,现在都处理了。
至于候选人为什么会更新一些而不是其他人?很可能是因为某些原因你最终选错了所选的行。因为我没有你的代码副本来看到所有的渗透,我只能猜测。