2016-06-14 20 views
0

私はグリッドビューの編集と更新ボタンのコードを実装しようとしましたが、それは私のために働いていないようです。ボタンはうまく機能しますが、削除と更新は機能しません。実行時にエラーが発生しました。エラーは次のとおりです。「MySql.Data.MySqlClient.MySqlException型の例外がMySql.Data.dllで発生しましたが、ユーザーコード で処理されませんでした。追加情報: 'where句内の' p001 '列が不明です」「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

関連する問題