[C#] DataGridView 應用(三) – 修改資料、條件設定

上一篇[C#] DATAGRIDVIEW 應用(二) – 右鍵選單、新增資料
介紹了使用右鍵選單來新增資料的方法
下一步我們將定義一些修改條件
並加入修改資料的功能


下圖是目前資料表的內容
這次的範例我所要設定的條件為

  1. 只能修改ContactName
  2. 輸入不超過30個字

2016-5-11 下午 05-02-36

先實作 1. 只能修改ContactName
這邊要使用DataGridView的CellBeginEdit事件來做Column的驗證

string textBeforeEdit;
private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
    if (e.ColumnIndex == 2) //只允許修改第3個Column(ContactName)
    {
        //儲存編輯前的文字,可以用來復原編輯前的狀態
        //若Value為null,則會設為空字串
        textBeforeEdit = (dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value ?? "").ToString();
        return;
    }
    else
    {
        MessageBox.Show("僅開放修改ContactName");
        e.Cancel = true; //讓使用者無法繼續進行修改
    } 
}

接著看看效果如何
嘗試點擊第三欄的格子進行修改
如下圖,可以進行文字內容的編輯
2016-5-11 下午 05-29-58
再來點點看其他欄位的格子
就會跳出MessageBox,且無法進行文字編輯
2016-5-11 下午 05-30-33.png


接著實作 2.輸入不超過30個字
使用DataGridView的CellEndEdit事件來做文字內容的驗證

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    //取得編輯中的格子內容,若Value為null,則設為空字串
    string text = (dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value ?? "").ToString();
    if (text.Length > 30)
    {
        MessageBox.Show("輸入不可超過30字");
        //復原編輯前狀態
        dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = textBeforeEdit;
    }
    else
    {
        //下一步要在這裡實作資料修改的方法
    }
}

測試一下,輸入超過30個字
2016-5-11 下午 05-40-00
跳出提示視窗
2016-5-11 下午 05-40-08
然後復原為編輯前的狀態
2016-5-11 下午 05-40-15


最後使用Entity Framework進行資料修改
方法都跟之前介紹的差不多

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    //取得編輯中的格子內容,若Value為null,則設為空字串
    string text = (dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value ?? "").ToString();
    if (text.Length > 30)
    {
        MessageBox.Show("輸入不可超過30字");
        //復原編輯前狀態
        dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = textBeforeEdit;
    }
    else
    {
        try
        {
            //取得第一格的CustomerID
            string customerID = (dataGridView1.Rows[e.RowIndex].Cells[0].Value ?? "").ToString();
            //從資料庫根據ID取得目標Customer
            Customers cus = ef.Customers.Where(x => x.CustomerID == customerID).First();
            cus.ContactName = text;
            ef.SaveChanges();
            MessageBox.Show("修改成功");
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
            //修改失敗,復原編輯前狀態
            dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = textBeforeEdit;
        }
    }
}

進行修改測試
2016-5-11 下午 05-50-48
跳出修改成功的訊息
2016-5-11 下午 05-51-08
最後進SQL Server確認一下
2016-5-11 下午 05-51-39
確認修改成功!


下一篇:[C#] DataGridView 應用(四) – DataGridViewCell

廣告

3 thoughts on “[C#] DataGridView 應用(三) – 修改資料、條件設定

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s