При редактировании DataGrid на экране старое значение
От: Poltoraki  
Дата: 02.12.04 14:33
Оценка:
При редактировании 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();
}
Re: При редактировании DataGrid на экране старое значение
От: ZevS  
Дата: 02.12.04 14:50
Оценка:
не тут ли?

if (!Page.IsPostBack) 
{ 
BindGrid(); 
} 
}
Re[2]: При редактировании DataGrid на экране старое значение
От: Poltoraki  
Дата: 02.12.04 14:55
Оценка:
Здравствуйте, ZevS, Вы писали:

ZS>не тут ли?


ZS>
ZS>if (!Page.IsPostBack) 
ZS>{ 
ZS>BindGrid(); 
ZS>} 
ZS>} 

ZS>


Извини, не понял. А что тут?
Re[3]: При редактировании DataGrid на экране старое значение
От: ZevS  
Дата: 02.12.04 15:09
Оценка:
Здравствуйте, Poltoraki, Вы писали:

P>Здравствуйте, ZevS, Вы писали:


ZS>>не тут ли?


ZS>>
ZS>>if (!Page.IsPostBack) 
ZS>>{ 
ZS>>BindGrid(); 
ZS>>} 
ZS>>} 

ZS>>


P>Извини, не понял. А что тут?


То что при изменения в базу пишутся на PosBack, а обновление данных грида происходит только при НЕ Page.IsPostBack. Тосюда в гриде показывается то что осталось во ViewState.
Re: При редактировании DataGrid на экране старое значение
От: Gollum Россия  
Дата: 02.12.04 15:23
Оценка:
Здравствуйте, 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
Eugene Agafonov on the .NET

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.