簡體   English   中英

C# - 搜索 dataGridView 后保存按鈕

[英]C# - Save button after searched the dataGridView

我是編程新手,我創建了以下按鈕來搜索 dataGridView

private void btnInCollection1_Click(object sender, EventArgs e)
{
    SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM dbo.SS1 WHERE InCollection = 1 ", con);
    DataTable data = new DataTable();
    sda.Fill(data);
    dataGridView1.DataSource = data;
}

我想編輯 dataGridView 中的數據,然后使用另一個按鈕保存更改。 你能幫我保存代碼嗎?

我嘗試了以下代碼,但它沒有將數據保存回數據庫。

private void btnSaveGridView_Click(object sender, EventArgs e)
{
    Cursor.Current = Cursors.WaitCursor;
    try
    {
        sS1BindingSource2.EndEdit();
        sS1TableAdapter1.Update(this.sSDataSet1.SS1);
        MessageBox.Show("You have been successfully saved.", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
    Cursor.Current = Cursors.Default;
}

你這個設置有問題

這一行:

sS1TableAdapter1.Update(this.sSDataSet1.SS1);

意味着您有一個強類型數據集,設置了表適配器和數據表,但您的btnInCollection1_Click代碼暗示您已經繞過了所有這些,創建了弱類型數據表,從數據適配器填充它並將其分配給網格的數據源。 它有效,但有點買車然后推着它上下班而不是開車

這也意味着您的 datagridview 正在一個數據表中顯示數據,但您正在嘗試保存位於不同數據表中的數據

我建議您將btnInCollection1_Click中的所有代碼btnInCollection1_Click扔掉; VS 已經在您制作表格適配器時為您編寫了它,因此購買了那條狗后您無需自己吠叫。

將代碼替換為:

sS1TableAdapter1.Fill(this.sSDataSet1.SS1);

在代碼的其他地方,如果你還沒有它,把它放一次(例如在構造函數中):

dataGridView1.DataSource = sS1BindingSource2;
sS1BindingSource2.DataSOurce = this.sSDataSet1.SS1;

您可能已經在 .Designer.cs 中擁有這些行 - 如果您再次需要它們,則不再需要它們。

這可能不是最佳選擇,但我無法從您發布的內容中輕松確定必要的額外信息


我實際上建議你:

  • 制作新表格
  • 打開數據源窗口(查看菜單,其他窗口)
  • 將 SS1 節點拖到您的表單上
  • 出現一個網格,在底部的托盤中,您應該有一個ss1bindingsource綁定到您的sSDataSet (網格綁定到 bindingsource。在您后面的代碼中,您應該有一個 Fill 命令,該命令使用您的 tablaeadapter 來填充網格。也存在是一個帶有保存按鈕的 bindingnavigator

你不需要編寫任何代碼來填充你的網格,或者保存它——如果你查看新表單的代碼文件,你會看到 VS 為你編寫了這一切

如果要使用表適配器執行參數化搜索,請打開數據集,右鍵單擊適配器,選擇添加查詢並輸入例如SELECT * FROM dbo.SS1 WHERE InCollection = @inColl 將方法稱為 FillByInCollection 之類的相關FillByInCollection (不要稱其為 FillBy1 - 無休止地將數字附加到方法和變量名稱只是為了使它們唯一是一個愚蠢的想法,並且會導致高度不可讀的程序)然后在您的相關按鈕中單擊調用它,例如:

sS1TableAdapter1.Fill(this.sSDataSet1.SS1, 1); //fill collectionID 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM