2016-06-14 3 views
0

Я попробовал Внедрить код для кнопки «Редактировать и обновить» для gridview, но для меня это кажется неэффективным. Кнопка добавления хорошо работает, но удаление и обновление не работают. Во время ошибки выполнения ошибка: «Исключение типа« MySql.Data.MySqlClient.MySqlException »произошло в MySql.Data.dll, но не было обработано в коде пользователя Дополнительная информация: Неизвестный столбец« p001 »в разделе« where »»Gridview Редактировать Удалить и обновить в ASP.NET

Примечание: тип p_ID в базе данных VARCHAR (10), имя varch (100), уровень VARCHAR, значение VARCHAR

общественного частичного класса ManagePractice: System.Web.UI.Page {

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     BindData(); 
    } 
} 
protected void LinkButton1_Click(object sender, EventArgs e) 
{ 
    TextBox txtID = (TextBox)GridView1.FooterRow.FindControl("txtID"); 
    TextBox txtSubject = (TextBox)GridView1.FooterRow.FindControl("txtSubject"); 
    RadioButtonList Level = (RadioButtonList)GridView1.FooterRow.FindControl("RadioButtonList2"); 
    RadioButtonList PType = (RadioButtonList)GridView1.FooterRow.FindControl("RadioButtonList1"); 
    AddPractice(txtID.Text.Trim(), txtSubject.Text.Trim(), Level.Text.Trim(), PType.Text.Trim()); 
    BindData(); 
} 
private void AddPractice(string P_Id, string subject, string level, string type) 
{ 
    string connStr = @"Data Source=localhost;Database=ahsschema;User Id=webuser;Password=webuser2014"; 

    using (MySqlConnection cn = new MySqlConnection(connStr)) 
    { 
     string query = "insert into practice(P_Id,name,level,value) values ('" + P_Id + "','" + subject + "','" + level + "','" + type + "')"; 
     MySqlCommand cmd = new MySqlCommand(query, cn); 
     cn.Open(); 
     cmd.ExecuteNonQuery(); 
     cn.Close(); 

    } 
} 
private void BindData() 
{ 
    DataTable dt = new DataTable(); 
    string connStr = @"Data Source=localhost;Database=ahsschema;User Id=webuser;Password=webuser2014"; 
    using (MySqlConnection cn = new MySqlConnection(connStr)) 
    { 
     MySqlDataAdapter adp = new MySqlDataAdapter("select P_Id,level,name,value from practice", cn); 
     adp.Fill(dt); 

    } 
    if (dt.Rows.Count > 0) 
    { 
     GridView1.DataSource = dt; 
     GridView1.DataBind(); 

    } 
} 

protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) 
{ 
    GridView1.EditIndex = -1; 
    BindData(); 
} 

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) 
{ 
    string id = (GridView1.DataKeys[e.RowIndex].Value.ToString()); 
    DeletePractice(id); 
    BindData(); 


} 

protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) 
{ 
    GridView1.EditIndex = e.NewEditIndex; 
    BindData(); 
} 

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{ 
    // int id = int.Parse(GridView1.DataKeys[e.RowIndex].Value.ToString()); 
    TextBox txtID = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtID"); 
    TextBox txtSubject = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtSubject"); 
    // TextBox Level1 = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtlevel"); 
    // TextBox PType1 = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtPType1"); 
    RadioButtonList Level = (RadioButtonList)GridView1.Rows[e.RowIndex].FindControl("RadioButtonList2"); 
    RadioButtonList PType = (RadioButtonList)GridView1.Rows[e.RowIndex].FindControl("RadioButtonList1"); 

    UpdatePractice(txtID.Text , txtSubject.Text, Level.Text, PType.Text); 
    GridView1.EditIndex = -1; 
    BindData(); 

} 
private void UpdatePractice(string P_Id, string name, string level, string value) 
{ 
    string connStr = @"Data Source=localhost;Database=ahsschema;User Id=webuser;Password=webuser2014"; 
    using (MySqlConnection cn = new MySqlConnection(connStr)) 
    { 
     string query = "UPDATE practice SET P_Id='" + P_Id + "',name='" + name + "',level='" + level + "',value='" + value + " WHERE P_Id=" + P_Id + ""; 
     MySqlCommand cmd = new MySqlCommand(query, cn); 
     cn.Open(); 
     cmd.ExecuteNonQuery(); 
     cn.Close(); 
    } 
} 
private void DeletePractice(string id) 
{ 
    string connStr = @"Data Source=localhost;Database=ahsschema;User Id=webuser;Password=webuser2014"; 
    using (MySqlConnection cn = new MySqlConnection(connStr)) 
    { 
     string query = "DELETE FROM practice WHERE P_Id=" + id + ""; 
     MySqlCommand cmd = new MySqlCommand(query, cn); 
     cn.Open(); 
     cmd.ExecuteNonQuery(); 
     cn.Close(); 
    } 
} 

ответ

0

Первый взгляд:

Поскольку столбец P_Id имеет тип данных VARCHAR(10), я понял, что вы забыли включить некоторые дополнительные апострофы в UPDATE & Предложение DELETE. Правильная форма заявления SQL должна быть (обратите внимание дополнительные апострофов знаки вокруг колонны p_id):

string query = "UPDATE practice SET P_Id='" + P_Id + "',name='" + name + "',level='" + level + "',value='" + value + "' WHERE P_Id= '" + P_Id + "'"; 

и

string query = "DELETE FROM practice WHERE P_Id='" + id + "'"; 

только строковые значения требуют апострофов вокруг них, номера нет.

+0

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

+0

Удостоверьтесь, что события GridView1_RowEditing и GridView1_RowUpdating загораются должным образом, когда при нажатии кнопки редактирования происходит отладка. Если ваш файл aspx содержит некоторые ошибки Javascript, пожалуйста, покажите им, чтобы они сузили проблему редактирования сетки. –

+0

Я показываю учебник, что я получил код от него, когда он нажал кнопку «Редактировать», другой контент в этой строке преобразует из ярлыка в текстовое поле, но мой код не конвертирует его, когда я нажал кнопку «Изменить». Я не знаю, как это решить. я должен создавать новые текстовые поля в Шаблоне элементов для редактирования? – John