Как добавить новую строку в БД, а затем отредактировать ее с помощью элемента управления GridView? - PullRequest
1 голос
/ 10 марта 2009

В моем приложении я использую элемент управления видом сетки.

Я создаю новую пустую строку в моем элементе управления видом сетки, используя следующий код:

string co = ConfigurationSettings.AppSettings["MyLogin"];
            SqlConnection connection = new SqlConnection(co);
            connection.Open();                
string sql = "insert into TeamMember_table "
          + "values('','','','','','','','','','','','')";                
SqlDataAdapter dp = new SqlDataAdapter(sql, connection);                
DataSet ds = new DataSet();                
dp.Fill(ds);                
gridview1.DataBind();               
connection.Close();

Пустая строка была успешно добавлена, но моя проблема в том, что я хочу ввести значения в эту пустую строку и сохранить это значение в таблице, когда нажимаю кнопку сохранения.

Каков наилучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 10 марта 2009

Первый аргумент SqlDataAdapter - это оператор SELECT, который нужно использовать; Ваш код добавляет новую строку базы данных каждый раз, когда запрашиваются данные (что звучит очень, очень неправильно), плюс я ожидаю, что сам запрос не будет работать из-за путаницы из-за INSERT против SELECT.

Вы действительно должны просто сделать SELECT из TeamMember_table, а затем возможно добавить строку в таблицу данных local впоследствии:

string sql = "SELECT * FROM TeamMember_table";
SqlDataAdapter dp = new SqlDataAdapter(sql, connection);                
DataSet ds = new DataSet();   
dp.Fill(ds);
DataTable table = ds.Tables[0];
table.Rows.Add("", "", ..., "") 

Лично я не добавил бы фальшивый ряд, если это не было абсолютно необходимо для привязки; Боюсь, я не могу советовать об этом ... но вам нужно быть осторожным, чтобы случайно не добавить пустые строки. Возможно, проверьте постбэк (при условии ASP.NET) и сохраните его, только если в нем есть что-то полезное.

0 голосов
/ 10 марта 2009

Возможно, вы захотите использовать такие события, как RowDataBoudn и RowDataDelete, чтобы повлиять на это поведение. Например:

protected void Page_Load(object sender, EventArgs e) {
    GridView1.RowDataBound += GridView1_RowDataBound;
    GridView1.RowUpdated += GridView1_RowUpdated;
    if (!IsPostBack) {
        string co = ConfigurationManager.ConnectionStrings["MyConnectionString"];
        using (SqlConnection connection = new SqlConnection(co)) {
            connection.Open();
            string sql = "select ....";
            SqlDataAdapter dp = new SqlDataAdapter(sql, connection);
            DataSet ds = new DataSet();
            dp.Fill(ds);

            GridView1.DataSource = ds.Tables["MyTable"];
            GridView1.DataKeyNames = new string[] { "Id" };
            GridView1.DataBind();
        }                
    }
}

void GridView1_RowUpdated(object sender, GridViewUpdatedEventArgs e) {
    throw new NotImplementedException();
}

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) {
    if (e.Row.RowType == DataControlRowType.DataRow) {
        Label l = (Label)e.Row.FindControl("Label1");
        l.Text = "some text value";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...