При редактировании DataGrid на экране старое значение, а в базе данных новое.
Меняю, скажем, что-то с "1" на "2", новое значение "2" прописывается в базу данных, а на экране остается старое "1". Если второй раз кликнуть update, то в появившемся текстбоксе видно новое значение "2". Где порылась собака понять не могу. Код ниже. Спасибо!
void Page_Load(Object sender, EventArgs e)
{
SqlConnection myConnection = new SqlConnection("server=**;user=**;password=**;database=**;");
SqlDataAdapter myCommand = new SqlDataAdapter("SELECT * from Interface", myConnection);
DataSet EditDS = new DataSet();
myCommand.Fill(EditDS, "RoomEdit");
EditDW = new DataView();
EditDW = EditDS.Tables["RoomEdit"].DefaultView;
EditGrid.DataSource = EditDW;
if (!Page.IsPostBack)
{
EditGrid.DataBind();
}
}
void BindGrid()
{
EditGrid.DataSource = EditDW;
EditGrid.DataBind();
}
void EditGrid_Update(Object sender, DataGridCommandEventArgs e)
{
TextBox RoomUseDescTextB = (TextBox)e.Item.Cells[9].Controls[0];
TextBox RoomUseCdTextB = (TextBox)e.Item.Cells[10].Controls[0];
String newRoomUseCd = RoomUseCdTextB.Text;
String newRoomUseDesc = RoomUseDescTextB.Text;
SqlConnection connUpdate = new SqlConnection("server=**;user=**;password=**;database=**;");
connUpdate.Open();
String sql_edit = "UPDATE Interface " +
"SET RoomUseCode = '" + newRoomUseCd + "', " +
"RoomUseDesc = '" + newRoomUseDesc + "'" +
" WHERE ID = " + e.Item.Cells[0].Text;
SqlCommand sqlCommandUpdate = new SqlCommand(sql_edit,connUpdate);
sqlCommandUpdate.ExecuteNonQuery();
connUpdate.Close();
EditGrid.EditItemIndex = -1;
BindGrid();
}
void Page_Load(Object sender, EventArgs e)
{
SqlConnection myConnection = new SqlConnection("server=**;user=**;password=**;database=**;");
SqlDataAdapter myCommand = new SqlDataAdapter("SELECT * from Interface", myConnection);
DataSet EditDS = new DataSet();
myCommand.Fill(EditDS, "RoomEdit");
EditDW = new DataView();
EditDW = EditDS.Tables["RoomEdit"].DefaultView;
if (!Page.IsPostBack)
{
BindGrid();
}
}
void BindGrid()
{
EditGrid.DataSource = EditDW;
EditGrid.DataBind();
}
void EditGrid_Update(Object sender, DataGridCommandEventArgs e)
{
TextBox RoomUseDescTextB = (TextBox)e.Item.Cells[9].Controls[0];
TextBox RoomUseCdTextB = (TextBox)e.Item.Cells[10].Controls[0];
String newRoomUseCd = RoomUseCdTextB.Text;
String newRoomUseDesc = RoomUseDescTextB.Text;
SqlConnection connUpdate = new SqlConnection("server=**;user=**;password=**;database=**;");
connUpdate.Open();
String sql_edit = "UPDATE Interface " +
"SET RoomUseCode = '" + newRoomUseCd + "', " +
"RoomUseDesc = '" + newRoomUseDesc + "'" +
" WHERE ID = " + e.Item.Cells[0].Text;
SqlCommand sqlCommandUpdate = new SqlCommand(sql_edit,connUpdate);
sqlCommandUpdate.ExecuteNonQuery();
connUpdate.Close();
EditGrid.EditItemIndex = -1;
BindGrid();
}
не тут ли?
if (!Page.IsPostBack)
{
BindGrid();
}
}
Здравствуйте, ZevS, Вы писали:
ZS>не тут ли?
ZS>ZS>if (!Page.IsPostBack)
ZS>{
ZS>BindGrid();
ZS>}
ZS>}
ZS>
Извини, не понял. А что тут?
Здравствуйте, Poltoraki, Вы писали:
P>Здравствуйте, ZevS, Вы писали:
ZS>>не тут ли?
ZS>>ZS>>if (!Page.IsPostBack)
ZS>>{
ZS>>BindGrid();
ZS>>}
ZS>>}
ZS>>
P>Извини, не понял. А что тут?
То что при изменения в базу пишутся на PosBack, а обновление данных грида происходит только при НЕ Page.IsPostBack. Тосюда в гриде показывается то что осталось во ViewState.
Здравствуйте, Poltoraki, Вы писали:
P>>При редактировании DataGrid на экране старое значение, а в базе данных новое.
P>>Меняю, скажем, что-то с "1" на "2", новое значение "2" прописывается в базу данных, а на экране остается старое "1". Если второй раз кликнуть update, то в появившемся текстбоксе видно новое значение "2". Где порылась собака понять не могу. Код ниже. Спасибо!
Вообще, странно... А почему не воспользоваться сразу UpdateCommand у SqlDataAdapter? Тогда надо будет датасет менять. Лучше в общем этот код переписать по нормальному — с параметрами а не с конкатенацией убогой, а лучше вообще нормально выставить у DataAdapter селект делит и инсерт команды.
А для минимизации изменений надо так:
void Page_Load(Object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
BindGrid() ;
}
}
void BindGrid()
{
SqlConnection myConnection = new SqlConnection("server=**;user=**;password=**;database=**;");
SqlDataAdapter myCommand = new SqlDataAdapter("SELECT * from Interface", myConnection);
DataSet EditDS = new DataSet();
myCommand.Fill(EditDS, "RoomEdit");
EditDW = new DataView();
EditDW = EditDS.Tables["RoomEdit"].DefaultView;
EditGrid.DataSource = EditDW;
EditGrid.DataBind();
}
Только отстой хардкодить коннекшн стринг и команды. Лучше использовать хранимые порцедуры и вынести строку соединения в веб.конфиг
Ihesu who hath wonders sore, grants us the blyss of heathen