VS2005 DataGridView 和 GirdView 橫向大比拼

 

VS2005 DataGridView 和 GirdView 橫向大比拼

一: 添加數據到 DataGridView ,GridView 默認情況下讓他們自動生成列:
DataGridView 有序的將數據顯示出來,就象Excel 表格一樣..當某一列超出範圍的時候,多餘的用...代替,也可以調整列的寬度,讓數據全部顯示出來
GridView以最大化的方式將數據全部顯示出來,不足的是,當某一列的數據,超出範圍的時候,他會換行,即使設置爲不換行,整個頁面的佈局就被破壞了..
由於DataGridView ,GridView 默認生成的列表頭 都是英文的,所以通常需要綁定列:

添加列時候, DataGridView 默認是左對齊的, 添加列對話框只是添加了 列的名字 和 表頭, 還要在編輯列對話框 綁定數據
 而 GridView 數據對齊方式,是根據控件的對齊方式,如 GridView 左對齊,則 表頭和數據行都是左對齊的.,添加列的時候,默認爲數據綁定列和 表頭,所以一步到位...

目前要解決的問題 :DataGridView 暫無,GridView 數據超出的時候,該怎麼辦 ?
 
首先在 GridView 數據一欄有一個 屬性 DataFormatString ,我們知道通常是用來設置列的樣式的 如{0:yyyy-MM-dd}如果那一類是時間,顯示出來就只有 年,月,日..我們能不能讓他 在數據超出範圍的時候,截取,並用...代替呢 ?
======以下介紹 DataFormatString
使用 DataFormatString 屬性來提供列中各項的自定義格式。
數據格式字符串由以冒號分隔的兩部分組成,形式爲 { A : Bxx }。例如,格式化字符串 {0:F2} 將顯示帶兩位小數的定點數。

整個字符串必須放在大括號內,表示它是格式字符串,而不是實際字符串。大括號外的任何文本均顯示爲實際文本。
  [小知識點] 如果 我們這樣寫,有什麼效果呢 ? {0:F2}% ,顯然,如前面 所示,列正常顯示出來,只不過 在每一列的數據後面多加了一個 %

冒號前的值(常規示例中爲 A)指定在從零開始的參數列表中的參數索引
注意
此值只能設置爲 0,因爲每個單元格中只有一個值。

C
 以貨幣格式顯示數值。 $ {0: C0}{0: C1}{0: C2} C後面的小數代表你要 顯示的小數位數
D
 以十進制格式顯示數值。 {0:d0}{0:d1}對整數來說,效果一樣,{0:d2}{0:d3}...的後面的小數就代表數據前面的0 如 01 02 001 002

F
 以固定格式顯示數值。 {0:f}默認爲帶2個小數點的小數. {0:f0} {0:f1} {0:f2}  後面的小數代表你要 顯示的小數位數

N
 以數字格式顯示數值。  和上面大同小...
X
 以十六進制格式顯示數值。  以及 P 代表 %

除 X 以指定的大小寫形式顯示十六進制字符之外,其他格式字符不區分大小寫 所以 {0:c} 和{0:C} 效果一樣
===============
 以上是一些常用的格式,也許你會很興奮,終於可以小試伸手了,設置了不同的樣式之後,數據都沒有變化,這時你會奇怪,怎麼回事,
因爲還有一個 屬性你忘了  HtmlEncode="False" 否則是顯示不出效果的...這個屬性將在後面介紹...
===============
  我們發現,他並沒有內置的格式來 控制超出的字符串..如果用自定義格式化字符串,太麻煩了  ,如果讓 GridView 不能換行,超出的字符串被截斷,然後 設置格式換字符串  {0:f}....我們 也未能發現有控制長度的格式..
  實在沒有辦法了,就只好 再數據綁定之後,用 循環 去遍歷截取...

 現在介紹第三種方法..將那一個列放在 模板列 裏面,他享有和其他列同樣的數據源{這個是我以前沒有想到的}
  <asp:TemplateField HeaderText=" 內容 ">                                    
                                     <ItemStyle HorizontalAlign="Center" />
                                     <HeaderStyle HorizontalAlign="Center" Width="15%" />
                                     <ItemTemplate>
                                         <%# CutString(Convert.ToString(Eval("Content")), 20)%>
                                     </ItemTemplate>
                               </asp:TemplateField>
後臺代碼中
 if (str.Length > len)
        {
            return str.Substring(0, len) + "...";
        }
        else
        {
            return str;
        }
========這樣 GridView 超出字符串的問題 我們就解決了..
DataGridView 綁定數據之後,控件是活動的..而GridView 綁定之後,控件是死的...不再需要設置..

現在 我們要解決的如何 設置 DataGrid 樣式,以適應企業級開發.

DatagridView :

一 :
將數據綁定到 DataGridView 控件非常簡單和直觀,在大多數情況下,只需設置 DataSource 屬性即可。
在綁定到包含多個列表或表的數據源時,只需將 DataMember 屬性設置爲指定要綁定的列表或表的字符串即可。

二:數據源的定義

任何實現 IList 接口的類,包括一維數組。
任何實現 IListSource 接口的類,例如 DataTable 和 DataSet 類。
任何實現 IBindingList 接口的類,例如 BindingList 類。
任何實現 IBindingListView 接口的類,例如 BindingSource 類。

三:BindingSource 組件: 取代 DataSet 和 DataView 是喜還是優..

通常綁定到 BindingSource 組件,並將 BindingSource 組件綁定到其他數據源或使用業務對象填充該組件。
BindingSource 組件爲首選數據源,因爲該組件可以綁定到各種數據源,並可以自動解決許多數據綁定問題實際項目當中通常要注意的屬性:

 BindingSource 組件有兩個用途。首先,它提供一個將窗體上的控件綁定到數據的間接層。這是通過將 BindingSource 組件綁定到數 據源,然後將窗體上的控件綁定到 BindingSource 組件來完成的。與數據的所有進一步交互(包括導航、排序、篩選和更 新)都是通 過調用 BindingSource 組件來完成的。

 使用 BindingSource 篩選數據
將 Filter 屬性設置爲所需的表達式。
在下面的代碼示例中,表達式就是在列名之後加上該列所需的值。
BindingSource1.Filter = "ContactTitle='Owner'"

 用 BindingSource 進行數據排序
將 Sort 屬性設置爲後面要跟有 ASC 或 DESC 的所需列名稱,以指示是按升序還是降序排序。
用逗號分隔多個列。
BindingSource1.Sort = "Country DESC, Address ASC";

===在基於文本的單元格中啓用換行
this.dataGridView1.DefaultCellStyle.WrapMode =
    DataGridViewTriState.True;
===設置貨幣和日期值的格式
this.dataGridView1.Columns["UnitPrice"].DefaultCellStyle.Format = "c"; 貨幣
this.dataGridView1.Columns["ShipDate"].DefaultCellStyle.Format = "d"; 短日期
====
在實際項目當中 只需要注意這幾個 屬性 就可以了..
AllowUserToAddRows   指示是否向用戶顯示用於添加行的選項.
ColumnHeadersHeight  和 ColumnHeadersHeightSizeMode 配合使用..用於設置列的高度
RowHeadersVisible    指示是否顯示包含行標題的列
SelectionMode        指示如何選擇 DataGridView 的單元格
AllowUserToResizeRows  指示用戶是否可以調整行的大小
BackgroudColor       DataGridView 的背景色
ReadOnly      DataGridView 是否只讀
EditMode   表示確定單元格編輯啓動方式的模式
AutoSizeRowsMode  確定可見行的自動調整大小模式
AllowUserToDeleteRows 指示是否允許用戶從DaaGridView 刪除行
ColumnHeaDefaultCellStyle 默認的列標題樣式

RowHeadersWidthSizeMode 確定調整行標頭寬度的行爲
GridColor               分隔DataGridView 單元格的網格線的顏色

綁定方式 :

1.自動生成列  2. 綁定列 [可見,只讀,凍結]

對某列 設置凍結之後. Frozen =True,以它爲起點向左的列都會受影響
如 A B C D E 5 列 將 E 設置 Frozen =True  A B C D 的 Frozen 屬性會自動設置爲 True  無橫向滾動條..且優先 ScrollBars
將 B 列設置爲 凍結之後..A B 列不動.拖動橫向滾動條的時候,,C D E 移動.好像是 2層 ...

如果是自動生成列..我們無話可說..如果是綁定列.如果你綁定字段 是 A 表.查詢是B 表. 無結果.....
綁定列的時候,仍然會有自動創建的列..取消自動創建列的方法:
從程序角度 : 我們一般查詢 都是用 * ..改成具體的列 就避免了多於的列自動生成..

然後獲取當前行的某一列的值 : DataGridView1.CurrentRow.Cells[i].Value.ToString();

當一個頁面上的 2個 DataGridView 綁定同樣的數據時候,選中其中一個 DataGridView 的某一行的時候,另外一個 DataGridView也會選中


     this.dataGridView1.AllowUserToAddRows = false;
            this.dataGridView1.AllowUserToResizeRows = false;
            this.dataGridView1.BackgroundColor = System.Drawing.Color.White;


            this.dataGridView1.ColumnHeadersHeight = 25;
            this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
          
            this.dataGridView1.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnKeystroke;
            this.dataGridView1.Location = new System.Drawing.Point(12, 12);
            this.dataGridView1.MultiSelect = false;
            this.dataGridView1.Name = "dataGridView1";
            this.dataGridView1.ReadOnly = true;
            this.dataGridView1.RowHeadersVisible = false;
            this.dataGridView1.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing;
            this.dataGridView1.RowTemplate.Height = 23;
            this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
            this.dataGridView1.ShowCellErrors = false;
            this.dataGridView1.ShowEditingIcon = false;
            this.dataGridView1.ShowRowErrors = false;
            this.dataGridView1.Size = new System.Drawing.Size(463, 278);
            this.dataGridView1.TabIndex = 0;
=================以上問題解決後,馬上就要介紹 2着傳參數的問題==
GridView 中有一個 HypeLinkField 通過設置 DataNavigateUrlFields 和 DataNavigateUrlForamtString屬性 來 轉發頁面,並帶有參數
如果只是需要 轉發頁面就設置 NavigateUrl就可以了
 假如我使用的是 模塊列,  NavigateUrl='<%# "~/Default2.aspx?ID="+Convert.ToString(Eval("TaskDesciption"))%>'

DataGridView 就不象 GridView,我們很少用到 添加列,都是通過鼠標 單擊,雙擊,或者右鍵菜單來直接操作當前行的..

發佈了32 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章