сетка asp.net - массовое обновление всех ячеек - PullRequest
1 голос
/ 13 декабря 2011

Я использую сеточное представление asp.net для загрузки данных из моей таблицы данных sql. Я могу успешно загрузить данные.

Описание таблицы Sql: 3 cloumns: Местоположение, Имя, Фамилия

Местоположение является первичным ключом.

Дизайн:

Aspxpage имеет вид сетки, который имеет две кнопки внизу:

  1. Редактировать
  2. Сохранить

Когда пользователь нажимает кнопку «Редактировать», все ячейки в виде сетки становятся редактируемыми, чтобы пользователь мог редактировать и сохранять значения.

Моя проблема возникает с кнопкой сохранения, когда я не могу сохранить отредактированные данные обратно в SQL.

Вот код для нажатия кнопки сохранения:

protected void btnSave_Click(object sender, EventArgs e)
{
    int RowIndex=0;

    GridViewRow row = (GridViewRow)gvres.Rows[RowIndex];

    TextBox txtLanguage1 = row.FindControl("txtFName") as TextBox;
    TextBox txtLanguage2 = row.FindControl("txtLName") as TextBox;

    SqlConnection myConnection = new SqlConnection(connectionString);
    SqlCommand cmd = new SqlCommand("UPDATE UsersTable SET FirstName = @FirstName, LastName = @LastName WHERE Location = @Location", myConnection);


    cmd.Parameters.AddWithValue("@FirstName", txtFirstName.Text.Trim());
    cmd.Parameters.AddWithValue("@LastName", txtLastName.Text.Trim());

    myConnection.Open();
    cmd.ExecuteNonQuery();
    gvusers.EditIndex = -1;
    DataBind();
}

Исключение:"Необходимо объявить скалярную переменную" @Location "."

Ответы [ 3 ]

3 голосов
/ 13 декабря 2011

Вам необходимо добавить параметр в объект SqlCommand с именем "@Location".Вы упоминаете, что Location - это один из столбцов в вашей сетке - вы можете либо прочитать значение из столбца (аналогично тому, как вы получаете значения имени и фамилии), либо вы можете указать «Location» в качестве ключа данных.и получить его из свойства DataKeys сетки.

Я бы посмотрел на проект ASP.NET Real World Controls *1004* в Codeplex.Он позволяет выполнять массовое редактирование и достаточно умен, чтобы обновлять только измененные строки.

2 голосов
/ 13 декабря 2011
protected void btnSave_Click(object sender, EventArgs e)
{
    int RowIndex=0;

    GridViewRow row = (GridViewRow)gvres.Rows[RowIndex];

    TextBox txtLanguage1 = row.FindControl("txtFName") as TextBox;
    TextBox txtLanguage2 = row.FindControl("txtLName") as TextBox;
    TextBox txtLanguage3 = row.FindControl("txtLocation") as TextBox;


    SqlConnection myConnection = new SqlConnection(connectionString);
    SqlCommand cmd = new SqlCommand("UPDATE UsersTable SET FirstName = @FirstName, LastName = @LastName WHERE Location = @Location", myConnection);

cmd.Parameters.AddWithValue("@FirstName", txtFirstName.Text.Trim());
cmd.Parameters.AddWithValue("@LastName", txtLastName.Text.Trim());

cmd.Parameters.AddWithValue ("@ Location", txtLocation.Text.Trim ());

myConnection.Open();
cmd.ExecuteNonQuery();
gvusers.EditIndex = -1;
DataBind();

}

2 голосов
/ 13 декабря 2011
//@Location means that the Insert / Update expects that field to be passed in / added //to your cmd.Parameters where are you adding @Location...? 

// посмотрим на строку, где у вас есть это WHERE Location = @Location ", myConnection); // добавляем объявления cmd.Parameters.AddWithValue ("@ Location", someLocationValue.Trim ());

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...