WinFrom開發小案例

来源:http://www.cnblogs.com/cys168/archive/2017/12/20/8072292.html
-Advertisement-
Play Games

C# 開發環境: VisualStudio2015 資料庫: SQLserver2008 程式主界面: 註釋: lbl標簽: 程式中的lbl標簽:編號、人數、姓名、性別、請輸入要查詢的信息,這裡他們只起到了說明作用,所有命名一般為預設,只修改Text文本。 程式中的lbl標簽:編號後面的0,他起到了 ...


C#

開發環境:

VisualStudio2015

資料庫:

SQLserver2008

程式主界面:

 

註釋:

lbl標簽:

程式中的lbl標簽:編號、人數、姓名、性別、請輸入要查詢的信息,這裡他們只起到了說明作用,所有命名一般為預設,只修改Text文本。

程式中的lbl標簽:編號後面的0,他起到了同步表中選中人員的id(編號) 人數後面的0,他的作用是時時更新表中總人數,他們的命名要規範,後面的代碼才能編寫更方便。

按鈕:

程式中的btn按鈕:保存、重置、退出、添加、查詢,要想實現他們的功能,就得雙擊他們然後在裡面打上代碼,才能賦予他們功能,這裡要註意按鈕的命名規範。

保存按鈕功能:

程式運行時,在姓名TextBox文本框中、性別TextBox文本框中,分別輸入人員的姓名、性別,然後按保存按鈕,人員的信息就被存到了資料庫中。

運行圖:

 

保存按鈕代碼:

                if (checkinput())
                {
                using (SqlConnection con = new SqlConnection(conStr))
                {
                    con.Open();
                    string sql = "insert B(name,sex) values  (@name,@sex)";
                    SqlCommand cmd = new SqlCommand(sql, con);
                    cmd.Parameters.Add(new SqlParameter("@name", txtname.Text));
                    cmd.Parameters.Add(new SqlParameter("@sex", txtsex.Text));
                    int fh = cmd.ExecuteNonQuery();
                    if (fh > 0) MessageBox.Show("添加成功!", "系統提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    sj();
                    rs();
                }
            }

這裡調用了檢測輸入的完整性方法:checkinput,如果姓名TextBox文本框或性別TextBox文本框中,姓名沒輸入,程式會提示請輸入姓名,性別沒輸入,程式會提示請輸入性別。

檢測輸入的完整性方法代碼:

            private bool checkinput()
            {
            if (txtname.Text == null || txtname.Text == "")
            {
                MessageBox.Show("請輸入姓名", "系統提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtname.Focus();
                return false;
            }
            if (txtsex.Text == null || txtsex.Text == "")
            {
                MessageBox.Show("請輸入性別", "系統提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtsex.Focus();
                return false;
            }
            return true;
        }

信息輸入不完整運行效果圖:

保存按鈕的代碼里還調用了,sj();rs();這兩個方法,sj();這個方法起到了刷新添加人員的信息到DGV表格中,rs();這個方法起到了更新lbl人數標簽後面的數據功能,更新了總人數的數據信息。

新加一個人員運行圖:

信息輸入完整添加成功,大家看人數後面的數字是:12,當我按確定以後,神奇的事情就發生了!

人數後面的數字12變成了13,這裡就是因為保存按鈕里調用了,rs();這個方法所以才有更新數據的功能

rs();方法的代碼:

            private void rs()
           {
            using (SqlConnection con = new SqlConnection("server=.;uid=sa;pwd=sa;database=YG"))
            {
                con.Open();
                string sql = "select count(*)from B";
                SqlCommand cmd = new SqlCommand(sql, con);
                object cx = cmd.ExecuteScalar();
                //lblRS.Text = cx.ToString(); 將查詢到的結果同步標簽
                lblrs.Text = cx.ToString(); //將查詢到的結果同步到lbl標簽
            }
        }

新保存的人員數據,馬上就能在DGV表格中找到:

這是因為保存按鈕代碼里調用了,sj();這個方法,將新保存的人員信息更新到了DGV表格中。

sj();方法的代碼:

            private void sj()
            {
            SqlConnection con = new SqlConnection(conStr);//創建連接對象指定連接字元串
            string sql = "select*from B";//sql查詢語句
            SqlDataAdapter cx = new SqlDataAdapter(sql, con);//連接資料庫並執行sql語句
            DataTable ta = new DataTable();//創建表對象
            cx.Fill(ta);//將查詢的內容填充到表對象
            dataGridView1.DataSource = ta;//設置DGV表的數據來源
        }

保存按鈕代碼:

                if (checkinput())//調用檢測輸入的完整性方法
                {
                using (SqlConnection con = new SqlConnection(conStr))//創建連接對象,指定連接字元串
                {
                    con.Open();//打開連接
                    string sql = "insert B(name,sex) values  (@name,@sex)";//SQL語句,在資料庫里要執行的操作
                    SqlCommand cmd = new SqlCommand(sql, con);//Cmand命名對象執行操作
                    cmd.Parameters.Add(new SqlParameter("@name", txtname.Text));//指定參數跟對應的數據匹配
                    cmd.Parameters.Add(new SqlParameter("@sex", txtsex.Text));//指定參數跟對應的數據匹配
                    int fh = cmd.ExecuteNonQuery();//ExecuteNonQuery(),這個方法在執行增、刪、改的時候就調用它
                    if (fh > 0) MessageBox.Show("添加成功!", "系統提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    sj();//調用這個方法更新DGV表格中的數據
                    rs();//調用這個方法更行lbl總人數的數據
                }
            }

 SqlCommand對象的三個方法:

ExcuteScalar():

這個方法只返回查詢結果集的第一行第一列

ExcuteNonQuery():

執行一個SQL語句,返回受影響的行數,這個方法主要用於執行對資料庫執行增加、修改、刪除操作

ExcuteReader():

查詢多行多列

重置按鈕的代碼:

 

            lblid.Text = "0";//lbl文本預設為0
            txtname.Clear();//將Text文本框的內容清空
            txtsex.Clear();//將Text文本框的內容清空
            txtname.Focus();//設置焦點

 

運行圖:

輸入好信息後,點擊重置按鈕就會清空輸入的信息

 退出按鈕的代碼:

  Application.Exit();

點擊退出後,程式就會被關閉。

添加按鈕代碼:

            添加人員 a = new 添加人員();//創建窗體對象
            a.ShowDialog();//以對話框模式彈出
            sj();//調用sj();這個方法來更新添加的人員數據到DGV表格中

這裡添加按鈕的功能跟保存按鈕的功能是類似的,目的都是為了添加人員數據,只不過我們在這裡做了一點代碼知識的擴展。

運行圖:

輸入的信息不完整的話,會提示請輸入完整的信息,這裡也得寫一個檢測輸入完整性的方法,信息輸入完整後就可以點擊保存了,保存按鈕的代碼和上面的類似,點擊返回按鈕後當前窗體就會關閉返回到人員管理主界面。

將SQL資料庫中的數據讀取到程式的DGV表格中代碼:

            private void sj()
            {
            SqlConnection con = new SqlConnection(conStr);//創建連接對象指定連接字元串
            string sql = "select*from B";//sql查詢語句
            SqlDataAdapter cx = new SqlDataAdapter(sql, con);//連接資料庫並執行sql語句
            DataTable ta = new DataTable();//創建表對象
            cx.Fill(ta);//將查詢的內容填充到表對象
            dataGridView1.DataSource = ta;//設置DGV表的數據來源
        }

其實這個方法在前面就已經出現過了,當我們新增一個人員的時候,就得調用sj();這個方法來更新DGV表格中的數據。

查詢按鈕代碼:

            SqlConnection con = new SqlConnection(conStr);//創建連接對象指定連接字元串
            //string sql = "select * from B where name like '%"+ txtcx.Text + "%'";
            string sql = string.Format("select*from B where name like'%{0}%' or sex like'%{1}%' or id like'%{2}%'",txtcx.Text,txtcx.Text,txtcx.Text);//SQL語句根據TextBox輸入的查詢條件進行模糊查詢
            DataTable b1 = new DataTable();//創建表對象
            SqlDataAdapter cx1 = new SqlDataAdapter(sql, con);//連接資料庫並執行sql語句
            cx1.Fill(b1);//將查詢的內容填充到表對象
            dataGridView1.DataSource = b1;//設置DGV表的數據來源

運行圖:

在TextBox文本框中,根據姓查詢這裡輸入了一個:劉  DGV表格中就會顯示所有姓劉的人員信息

運行圖:

在TextBox文本框中,根據性別查詢這裡輸入了一個:男 DGV表格中顯示了所有性別為男的信息。

 那麼功能都差不多快完善了,我們會發現有了新增,卻少了刪除跟修改的功能!!!

運行圖:

 

在這裡我們可以在DGV表格裡加一個上下文菜單,來實現修改和刪除的功能。

右鍵菜單中修改按鈕的代碼:

            添加人員 a = new 添加人員();//創建窗體對象
            a.Text = "修改人員";//將添加人員的窗體Text文本修改為“修改人員”
            a.Tag = dataGridView1.SelectedRows[0].Cells["id"].Value.ToString();//將選中的數據傳遞給修改人員窗體
            a.txtname.Text = dataGridView1.SelectedRows[0].Cells["name"].Value.ToString();//DGV表中選中的人員名字傳遞到修改人員窗體
            a.txtsex.Text = dataGridView1.SelectedRows[0].Cells["sex"].Value.ToString();///DGV表中選中的人員性別傳遞到修改人員窗體
            a.ShowDialog();//以對話框模式彈出

 運行圖:

修改人員的窗體與點擊添加按鈕彈出的窗體是同一個窗體,這裡只不過是用代碼修改了窗體的Text文本而已,DGV表中選中的數據也同步到了修改人員窗體對應的Text文本框中,在這裡我們只需要直接修改那些要修改的地方就KO了。

運行圖:

修改人員窗體中保存按鈕代碼:

                    if (checkinput())
                    {
                    if (this.Text == "添加人員")
                    {
                    using (SqlConnection con = new SqlConnection(conStr))
                    {
                        con.Open();
                        string sql = "insert B(name,sex) values  (@name,@sex)";
                        SqlCommand cmd = new SqlCommand(sql, con);
                        cmd.Parameters.Add(new SqlParameter("@name", txtname.Text));
                        cmd.Parameters.Add(new SqlParameter("@sex", txtsex.Text));
                        int fh = cmd.ExecuteNonQuery();
                        if (fh > 0) MessageBox.Show("添加成功!", "系統提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                        this.Close();
                    }
                    }
                    else
                    {
                    using (SqlConnection con = new SqlConnection(conStr))
                    {
                        con.Open();
                        //update<修改對象所在表> set < 修改對象 >=< 值 > where < 條件對象 >=< '條件內容' >
                       string sql = "update B set name=@name,sex=@sex where id=@id";
                        SqlCommand cmd = new SqlCommand(sql, con);
                        cmd.Parameters.Add(new SqlParameter("@id", this.Tag.ToString()));
                        cmd.Parameters.Add(new SqlParameter("@name", txtname.Text));
                        cmd.Parameters.Add(new SqlParameter("@sex", txtsex.Text));
                        int fh = cmd.ExecuteNonQuery();
                        if (fh > 0) MessageBox.Show("修改成功!", "系統提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                        this.Close();
                    }
                }
            }

修改人員中的保存按鈕代碼,跟點擊添加按鈕彈出的窗體中保存按鈕代碼一致,邏輯可能一時難以領悟,多看幾遍就熟能生巧了!

右鍵菜單中刪除按鈕的代碼:

                   if (dataGridView1.SelectedRows.Count > 0)
                   {
                   string xz = dataGridView1.SelectedRows[0].Cells["id"].Value.ToString();
                   using (SqlConnection con = new SqlConnection(conStr))
                   {
                    con.Open();
                    string sql = string.Format("delete from B where id='{0}'", xz);
                    SqlCommand cmd = new SqlCommand(sql, con);
                    int fh = cmd.ExecuteNonQuery();
                    if (fh > 0)
                    {
                        MessageBox.Show("刪除成功!", "系統提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                        sj();
                        rs();
                    }
                    else
                    {
                        MessageBox.Show("刪除失敗!", "系統提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        sj();
                        rs();
                    }
                }

增、刪、改、查,的代碼流程都大致相同:首先創建連接對象指定連接字元串,打開連接、sql語句在資料庫里要做什麼操作(增、刪、改、查)、然後創建Command命令對象連接資料庫並執行sql語句,定義一個變數來接收方法的返回值,增、刪、改操作時,調用ExecuteNonQuer這個方法,查詢操作時,一般調用的是ExcuteReader這個方法,要做的操作不同,調用的方法也會不同,定義變數時也得定義匹配這個方法的變數。

運行圖:

一個簡單的程式案例就講解完了,寫這篇博客也不求什麼利益,只是希望能帶給初學者一個啟示作用,也許多年以後學了多門語言的自己,連最初的C#編程語言結構邏輯思維全都忘光了,還可以在博客上回憶一下,只要你一直在。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • IS和AS 都是用於類型轉換的操作。 但是這兩個有什麼區別呢? 簡單的來說 is 判斷成立則返回True,反之返回false。as 成立則返回要轉換的對象,不成立則返回Null。 下麵掏一手代碼來說明一下。 總結 由他們返回值就可以簡單的知道他們的用法。 is 主要用於類型推斷,而不需要實際的轉換。 ...
  • 內容和表格內容一起讀; word內容: 代碼: 1 public static void ReadWordByOpenXml(string path) 2 { 3 using (WordprocessingDocument doc = WordprocessingDocument.Open(path ...
  • DBHelper類: 簡單的理解就是一個工具箱,我要用錘子的時候就在裡面拿,我要用剪刀的時候也可以在裡面拿,前提是我們寫的DBHelper夠不夠強大! 等時間充足再抽個時間出來寫這篇博客,因為最近快考試了得抓緊時間補習,如果覺得我寫的還不錯,可以關註我看我寫更多的文章。 ...
  • HashTable和Dictionary的區別 1.HashTable 哈希表(HashTable)表示鍵/值對的集合。在.NET Framework中,Hashtable是System.Collections命名空間提供的一個容器,用於處理和表現類似key-value的鍵值對,其中key通常可用來 ...
  • 1.先上效果 將所有節點加入ComboBox數據源,在ComboBox中選擇時下方Treeview顯示該節點下的子節點。 1.xaml文件,將以下代碼加入界面合適位置 2.後臺代碼 a.用於綁定的節點類 b.主界面類代碼 ...
  • 如果想支持 .xls,.xlsx 兩種格式 則必須安裝一個exe文件,下載路徑https://www.microsoft.com/zh-CN/download/details.aspx?id=13255 下載好安裝就支持.xls,.xlsx 兩種格式轉換成datatable了, 附代碼 public ...
  • 報錯信息:Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities we ...
  • 報錯信息:LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression 參考 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...