1

SQL データベース (GSM.sdf) からのデータを表示し、保存ボタンが押されたときに DataGridView に加えられた変更をデータベースに保存する DataGridView を作成しようとしています。データは問題なく表示されますが、保存ボタンを押しても何も起こりません。私はこのスレッドからのトップの答えに従ってきました:

http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/98bc0b4d-a2ea-4b74-81f0-473da624528a

しかし、それはうまくいきません。これが私のコードです:

namespace WindowsFormsApplication5
{
    public partial class Zeelot : Form
    {
        DataTable table = new DataTable();
        SqlCeDataAdapter z;
        DataSet gSMDataSet = new DataSet();
        public Zeelot()
        {
            InitializeComponent();
        }
        private void Zeelot_Load(object sender, EventArgs e)
        {
            string b = @"Data Source =.\SQLEXPRESS;database=GSM;Integrated Security=FALSE;Connection Timeout=30;User Instance=FALSE";
            SqlCeConnection conn = new SqlCeConnection(b);
            conn.Open();
            string cd = "SELECT * FROM PhoneNumbers";
            z = new SqlCeDataAdapter(cd, conn);
            z.Fill(gSMDataSet, "PhoneNumbers");
            table = gSMDataSet.Tables[0];
            conn.Close();
            dataGridView1.DataSource = table;
        }
        private void SaveButton_Click(object sender, EventArgs e)
        {
            SqlCeCommandBuilder local_SqlCommandBuilder = new SqlCeCommandBuilder(z);
            local_SqlCommandBuilder.ConflictOption = System.Data.ConflictOption.OverwriteChanges;
            z.UpdateCommand = local_SqlCommandBuilder.GetUpdateCommand();
            z.Update(((System.Data.DataTable)this.dataGridView1.DataSource));
            ((System.Data.DataTable)this.dataGridView1.DataSource).AcceptChanges();
        }

    }
}
4

2 に答える 2

1

あなたの問題は、 DataSource を System.Data.DataTable にキャストしている場所にあると思います

z.Update(gSMDataSet); を試してください。

また、 AcceptChanges() が必要だとは思わない

于 2012-07-29T04:11:03.040 に答える
0
  1. 最後にDataGridViewで.AcceptChanges()を呼び出す必要はありません。AcceptChanges()は、DGVから接続されたデータソース(DataTable)に変更を送信します

データベースに変更を送信する前に、AcceptChanges()を呼び出してみてください。

  1. あなたの問題はあなたのつながりにあると思います。手動で接続を作成して開き、DataAdapterに割り当てます。ただし、_Load()メソッド内で、接続を閉じます。_Click EventHandler内で使用されるDataAdapterは、_Load()メソッドで使用されるものと同じであるため(したがって、同じ接続を使用します)。すでに接続を閉じているため、データベースに変更を送信することはできません。

実行時に例外が発生しませんか?

データベースに変更を送信する前に、ブレークポイントを使用して接続オブジェクトの現在の状態を調べてみてください。

また、DataAdapter内で接続を使用する場合は、AFAIKMSが手動で接続を作成しないようにアドバイスします。

DataAdapterのコンストラクターは、独自に接続を作成できます

于 2012-08-21T11:34:12.267 に答える