none
C# DataGridView 與 richTextBox RRS feed

  • 問題

  • 請問在WindowsForm...我如果想要用DataGridView...查詢資料,當查詢到的資料,我去點選某一列,然後將某欄位資料顯示在richTextBox...不知可以嗎?

    如果可以請問大概要如何寫呢?

    謝謝。
    2010年2月21日 下午 03:02

解答

  • 可以啊. 我習慣是用 BindingSource當 DataTable和DataGridView的中介, 然後其它控置項的Binding也指向同一個BindingSource做同步化
    底下兩篇是VB.NET寫的, 不過道理上是一樣的, 你先看一下吧
    http://www.dotblogs.com.tw/billchung/archive/2009/06/15/8836.aspx
    http://www.dotblogs.com.tw/billchung/archive/2009/06/19/8903.aspx

    MSDN 文件庫很重要
    問題本身越具體, 越容易得到大家的回應
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    2010年2月21日 下午 03:15
    版主
  • hi
    也可以這樣嘗試看看
    dataGridView1_CellContentClick事件中
     private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
            {
                richTextBox1.Text = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
            }
    http://www.dotblogs.com.tw/ricochen/Default.aspx
    2010年2月21日 下午 03:30

所有回覆

  • 可以啊. 我習慣是用 BindingSource當 DataTable和DataGridView的中介, 然後其它控置項的Binding也指向同一個BindingSource做同步化
    底下兩篇是VB.NET寫的, 不過道理上是一樣的, 你先看一下吧
    http://www.dotblogs.com.tw/billchung/archive/2009/06/15/8836.aspx
    http://www.dotblogs.com.tw/billchung/archive/2009/06/19/8903.aspx

    MSDN 文件庫很重要
    問題本身越具體, 越容易得到大家的回應
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    2010年2月21日 下午 03:15
    版主
  • hi
    也可以這樣嘗試看看
    dataGridView1_CellContentClick事件中
     private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
            {
                richTextBox1.Text = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
            }
    http://www.dotblogs.com.tw/ricochen/Default.aspx
    2010年2月21日 下午 03:30
  • 好,謝謝...我先看一下,不懂在請教各位前輩~
    2010年2月21日 下午 03:38
  • 我想再請問一下,那如果我想要將RichtextBox...的資料寫入到資料庫...應該要用工具箱的哪些元件好?,因為我拉出一個richtextbox...在拉一個bindingsource...可他沒有出現要我選來源資料庫是哪?是要自己開發嗎?
    2010年2月22日 上午 06:23
  • 我很少用拉的方法寫BindingSource
    我現在這樣假設好了. 畫面上有一個DataGridView (DGV1), 有一個richtextBox (RTB1)
    要在DataGridView上顯示資料, 你總要先讀資料吧. 所以呢, 你會把資料用ADO.NET讀到一個DataTable中(DT1)
    宣告一個全域的BindingSource 叫  BS1
    好了.
    步驟 1: 將  BS1的資料來源指向DT1
          2: 將DGV1的資料來源指向 BS1
          3. 把RTB1的Text屬性Binding到  BS1的某個你要顯示資料的欄位
    到這邊, 你只要在 DGV1上移動指標, RTB1的Text內容就會改變
    至於存檔, 有很多種方法
    (1)另外寫一個單獨的存檔程序, 用 SQLCommand.ExcuteCommand去做Update SQL 動作
    (2)利用 SQLDataAdapter的UpdateCommand屬性

    PS:不要太依賴工具箱現成的東西, 那些可以讓你入門, 加快一些寫程式的時間, 但是太複雜的工作它是做不了的.
    你會這樣問, 表示你對ADO.NET的瞭解還不足. 把MSDN文件的內容花點時間研究. 要把基礎功夫打好才是王道

    MSDN 文件庫很重要
    問題本身越具體, 越容易得到大家的回應
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    2010年2月22日 上午 06:43
    版主
  • 嗯,對阿...對ado.net...不熟,書上也沒有教ado.net...對於c#...可以說是初學在多一點點而已...不過有在學習中...至於用工具箱...我也會盡量少用^^,謝謝你提醒

    2010年2月22日 上午 06:57
  • 這幾個,我比較認同Bill Chung的作法.
    我很少去用ado.net的物件.

    我的作法是二個UI元件間降偶.
    我不會將UI裡呈現的資料.如TextBox.Text 或Cell裡的資料撈出在送到別個元件算完在傳回.
    因為:如果單層UI還好做.如果巢狀UI就非常難做.如DataGrid包DataList包Comobox在包Tree..你要找某個節點值非常困難.
    我的作法:
    1.UI元件間是傳資料.我今天DataList的某個值傳到RichBox是傳資料.更進一步的說是傳ID.
    RichBox在由ID去資料庫或DataAccess層去要資料,在做編輯.
    2.我最常做的作法.如Linq To SQL.Linq To Entity,DataService...將資料轉企業物件.然後將該資料Binding到所有UI.因為該企業物件有做雙向通知的功能,所以你改資料.所有UI就會自動更新.
    2010年2月22日 上午 09:56
  • Bill Chung...你好,請問是不是手工打造程式?書上寫手工建立程式...
    有個範例像這樣

    oleDbconnection("provider=microsoft.jet.oledb.4.0;data source=c"\\db.mdb");
    oledbcommand oledbcommand1=new oledbcommand("select"form xxxx",oledbconnection1);

    oledbconnection1.open();
    oledbdatareader dr=oledbcommand1.executereader();

    while(dr.read())
    console.writeline(dr.getstring(0));
    dr.close();
    oledbcommand1.dispose();
    oledbconnection1.close();

    我是不是要類似這樣自己寫呢?
    謝謝
    2010年2月22日 下午 02:52
  • 類似, 不過如果是一次要讀回一堆資料, 用DbDataAdapter會更好用
    [OleDbDataAdapter 類別 ]
    良心建議你, MSDN上那份 ADO.NET不會寫的比書上還差, 是值得深讀的文件.
    你若真有心要弄懂ADO.NET, 就要狠下心花時間去研究.
    MSDN 文件庫很重要
    問題本身越具體, 越容易得到大家的回應
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    2010年2月22日 下午 03:20
    版主
  • 好,謝謝 Bill Chung...
    2010年2月22日 下午 03:33
  • Bill Chung...請問一下,我在msdn 看到以下程式碼,不太懂為什麼要這樣寫?

    為什麼要用 using {     }括起來?

    是因為這樣前面就不用載入這兩行嗎?
    using System.Data.Sql;
    using System.Data.SqlClient;
    private
    
    
    
    
     static
    
    
    
    
     void
    
    
     OpenSqlConnection(string
     connectionString)
    {
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
    connection.Open();
    Console.WriteLine("ServerVersion: {0}" , connection.ServerVersion);
    Console.WriteLine("State: {0}" , connection.State);
    }
    }
    2010年2月28日 上午 09:17
  • Hi,

    可參閱MSDN文章

    using (C# 參考)
    做為陳述式,此時它是用來定義一個範圍,物件會在此範圍結尾處進行處置 (Dispose)。請參閱 using 陳述式

    using 陳述式 (C# 參考)

    C# 會透過 .NET Framework Common Language Runtime (CLR) 來自動釋放用來儲存不再需要之物件的記憶體。記憶體的釋放是非決定性的,任何時候 CLR 決定執行記憶體回收,就會釋放記憶體。然而,最好是儘速釋放有限的資源,例如檔案控制代碼和網路連接。

    using 陳述式可讓程式設計人員指定使用資源的物件何時釋放資源。提供給 using 陳述式的物件必須實作 IDisposable 介面。此介面提供 Dispose 方法,此方法會釋放物件的資源。

    當 using 陳述式到達結尾處時,或者當例外狀況 (Exception) 擲回且程式控制權在陳述式結束之前已離開陳述式區塊時,using 陳述式就可以結束。


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2010年2月28日 上午 09:28
  • using (C# 參考)

    不是,放在前面,是匯入命名空間;在程式裡,會做處置,把連線關閉...
    2010年2月28日 上午 09:29
  • 所以他這個範例裡面的mc 是一個物件嗎?

    namespace PC
    {
        // Define an alias for the nested namespace.
        using Project = PC.MyCompany.Project;
      
           
       class A
        {
            void M()
            {
                // Use the alias
                Project.MyClass mc = new Project.MyClass();
            }
        }
      
           
           
       namespace MyCompany
        {
            namespace Project
            {
                public class MyClass
                {
               
                }
            }
        }


    }
    2010年2月28日 上午 09:57
  •   Project.MyClass mc = new Project.MyClass();
    你說這一行 ? 以 Project.MyClass 類別宣告一個 名為mc的物件, 並建構其為執行個體.
    這個, 應該是寫C#很基本的道理吧
    MSDN 文件庫很重要
    問題本身越具體, 越容易得到大家的回應
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    2010年2月28日 下午 03:13
    版主
  • hi
    依照你的範例可以參考
    using 指示詞 (C# 參考)
    http://msdn.microsoft.com/zh-tw/library/sf0df423.aspx

    using 指示詞有兩種用法:

    • 允許在命名空間中使用型別,如此一來,您就不需在該命名空間內限定型別的使用:
       using System.Text;

    • 建立命名空間或型別的別名 (Alias)。這稱為「using 別名指示詞」(Using Alias Directive)。
      using Project = PC.MyCompany.Project;


      using總體簡單來說。
      1用來指定要使用的命名空間。
      2.讓程式碼執行完畢釋放執行個體化物件相關資源。


    http://www.dotblogs.com.tw/ricochen/Default.aspx
    2010年2月28日 下午 03:18
  • 嗯嗯,謝謝...我只是懷疑...他是否為物件...^^
    2010年3月1日 上午 10:28