當前位置:首頁 » 編程語言 » sql右對齊

sql右對齊

發布時間: 2023-01-17 09:30:27

Ⅰ 在sql server2000中,如何把整型欄位轉換成字元串型欄位

使用函數STR()

STR
由數字數據轉換來的字元數據。

語法
STR ( float_expression [ , length [ , decimal ] ] )

參數
float_expression

是帶小數點的近似數字 (float) 數據類型的表達式。不要在 STR 函數中將函數或子查詢用作 float_expression。

length

是總長度,包括小數點、符號、數字或空格。默認值為 10。

decimal

是小數點右邊的位數。

返回類型
char

注釋
如果為 STR 提供 length 和 decimal 參數值,則這些值應該是正數。在默認情況下或者小數參數為 0 時,數字四捨五入為整數。指定長度應該大於或等於小數點前面的數字加上數字元號(若有)的長度。短的 float_expression 在指定長度內右對齊,長的 float_expression 則截斷為指定的小數位數。例如,STR(12,10) 輸出的結果是 12,在結果集內右對齊。而 STR(1223, 2) 則將結果集截斷為 **。可以嵌套字元串函數。

說明 若要轉換為 Unicode 數據,請在 CONVERT 或 CAST 轉換函數內使用 STR。

示例
A. 使用 STR
下例將包含五個數字和一個小數點的表達式轉換為有六個位置的字元串。數字的小數部分四捨五入為一個小數位。

SELECT STR(123.45, 6, 1)
GO

下面是結果集:

------
123.5

(1 row(s) affected)

當表達式超出指定長度時,字元串為指定長度返回 **。

SELECT STR(123.45, 2, 2)
GO

下面是結果集:

--
**

(1 row(s) affected)

即使數字數據嵌套在 STR內,結果集也是帶指定格式的字元數據。

SELECT STR (FLOOR (123.45), 8, 3)
GO

下面是結果集:

--------
123.000

(1 row(s) affected)

Ⅱ sql developer 怎麼調整對齊方式

這個改不了,設置中沒有看到

再說你把它給改成中間對齊,如果兩邊有空格的時候,你都不好發現

沒必要進行修改,非得想看居中效果可以先通過復制到excel 功能復制到excel里後,自己在調格式

sql developer主要時查看數據結果的,也不是編輯數據顯示的。

Ⅲ SQL2008 用什麼函數可以使數據右對齊,字元左對齊

沒函數

varchar類型右對齊。
char 類型左對齊(右邊自動添空)

Ⅳ 一個sql函數名,如果字元串不夠位數的話就在前面加上指定位數指定字元

select replace(space(指定位數-len('欄位')),space(1),'補位字元')+ltrim(str('欄位'))這個 你拿去改對應就ok了的

Ⅳ 在sql語句中str代表什麼

STR()函數,將數據轉換成字元串

Ⅵ SQL Server 2008 R2如何使用正則表達式搜索

正則表達式是簡明而靈活的表示法,用於查找和替換各種模式的文本。在 SQL Server Management Studio 的「查找和替換」對話框中的「查找內容」欄位中,可以使用一組特定的正則表達式。

使用正則表達式進行查找
1、若要在「快速查找」、「在文件中查找」、「快速替換」或 「在文件中替換」 操作過程中,在「查找內容」欄位啟用正則表達式,請在「查找選項」下選中「使用」,再選擇「正則表達式」。
2、「查找內容」欄位旁邊的「引用列表」三角形按鈕將變為可用狀態。單擊此按鈕可顯示一組最常用的正則表達式。如果選擇了表達式生成器中的某個項,則可將該項插入「查找內容」字元串。

注意:

「查找內容」字元串中使用的正則表達式與 Microsoft .NET Framework 編程中的有效正則表達式相比,語法上存在差異。例如,在「查找和替換」對話框中,大括弧 {} 用於表示帶標記的表達式。所以,表達式「zo{1}」將匹配所有「zo」後帶標記 1 的匹配項,如「Alonzo1」和「Gonzo1」。但在 .NET Framework 中,{} 符號用於表示量詞。因此,表達式「zo{1}」將匹配所有「z」後跟一個「o」的匹配項,如匹配「zone」,但不匹配「zoo」。

下表對「引用列表」中提供的正則表達式進行了說明。

表達式

語法

說明

任何單個字元: . 匹配除換行符外的所有單一字元。
零個或更多:* 匹配零或更多前導表達式的匹配項,執行所有可能的匹配。
一個或更多:+ 匹配至少一個前導表達式的匹配項。
行首:^ 僅匹配行首位置的字元串。
行尾:$ 僅匹配行尾位置的字元串。
字首:< 僅匹配文本中以此開頭的字。
字尾:> 僅匹配文本中以此結尾的字。
分行符:\n 匹配與平台無關的換行符。在替換表達式中,插入一個換行符。
在集合中的任何一個字元:[] 匹配 [] 中的任何一個字元。若要指定字元范圍,請列出起始字元和結束字元,並用短劃線 (-) 分隔,如 [a-z]。

不在集合中的任何一個字元:[^...] 匹配不在 ^ 之後的字元集中的任何一個字元。

或:| 匹配「或」符號 (|) 兩旁的任一表達式。常用於組中。例如,(sponge|mud) bath 可以匹配「sponge bath」和「mud bath」。

Escape:\ 將反斜杠 (\) 後的字元作為文字匹配。此表達式允許您搜索正則表達式標記中使用的符號,如 { 和 ^。例如, \^ 可用於查找字元 ^。

標記表達式:{} 匹配用括起來的表達式內的文本。

C/C++ 標識符: :i 匹配表達式 ([a-zA-Z_$][a-zA-Z0-9_$]*)。

用引號括起來的字元串: :q 匹配表達式 (("[^"]*")|('[^']*'))。

空格或製表符: :b 匹配空格或製表符。

整數: :z 匹配表達式 ([0-9]+)。

「引用列表」中只列出了部分可在「查找和替換」操作中使用的正則表達式。還可以將下列任一正則表達式插入「查找內容」字元串:

表達式 語法 說明

最少 - 零個或更多:@ 匹配零個或更多前導表達式的匹配項,匹配盡可能少的字元。

最少 - 一個或更多: # 匹配一個或更多前導表達式的匹配項,匹配盡可能少的字元。

重復 n 次:^n 匹配前導表達式的 n 個匹配項。例如,[0-9]^4 匹配所有四位數序列。

分組:() 將子表達式分組

第 n 個標記文本:\n 在「查找或替換」表達式中,指示匹配第 n 個標記表達式的文本,其中 n 為 1 到 9 之間的數字。
在「替換」表達式中,\0 將插入完整的匹配文本。

右對齊欄位:\(w,n) 在「替換」表達式中,在寬度至少為 w 個字元的欄位中,右對齊第 n 個標記表達式。

左對齊欄位:\(-w,n) 在「替換」表達式中,在寬度至少為 w 個字元的欄位中,左對齊第 n 個標記表達式。

阻止匹配:~(X) 如果在表達式的此處出現 X,則阻止匹配。例如,real~(ity) 匹配「realty」和「really」中的「real」,但不匹配「reality」中的「real」。

字母數字字元: :a 匹配表達式 ([a-zA-Z0-9])。

字母字元: :c 匹配表達式 ([a-zA-Z])。

十進制數字: :d 匹配表達式 ([0-9])。

十六進制數: :h 匹配表達式 ([0-9a-fA-F]+)。

有理數: :n 匹配表達式 (([0-9]+.[0-9]*)|([0-9]*.[0-9]+)|([0-9]+))。

字母字元串: :w 匹配表達式 ([a-zA-Z]+)。

Escape:\e Unicode U+001B。

響鈴: \g Unicode U+0007。

Backspace: \h Unicode U+0008。

製表符: \t 匹配製表符,Unicode U+0009。

Unicode 字元:\x#### 或 \u#### 匹配由 Unicode 值確定的字元,其中 #### 為十六進制數字。可以使用 ISO 10646 碼位或給出代理項對值的兩個 Unicode 碼位,指定基本多語言面(即代理項)以外的字元。

下表列出了按標准 Unicode 字元屬性匹配時的語法。雙字母縮寫和 Unicode 字元屬性資料庫中列出的縮寫相同。可以將這些縮寫指定為字元集的一部分。例如,表達式 [:Nd:Nl:No] 匹配任何數字。

表達式 語法 說明

大寫字母
:Lu
匹配任何單個大寫字母。例如,:Luhe 匹配「The」,但不匹配「the」。

小寫字母
:Ll
匹配任何單個小寫字母。例如,:Llhe 匹配「the」,但不匹配「The」。

標題大寫字母
:Lt
匹配一個大寫字母後跟一個小寫字母的字元,例如 Nj 和 Dz。

修飾字母
:Lm
匹配字母或標點符號(如逗號、交叉重音符和秒號),這些字母或標點符號是用於修飾前導字母的。

其他字母
:Lo
匹配其他字母,如歌特字母 ahsa。

十進制數字
:Nd
匹配十進制數字(如 0-9)及其全形對等數字。

字母數字
:Nl
匹配字母數字,如羅馬數字和零的表意數字。

其他數字
:No
匹配其他數字,如舊斜體數字一。

左標點
:Ps
匹配左標點,如左小括弧和左大括弧。

右標點
:Pe
匹配右標點,如右小括弧和右大括弧。

左引號
:Pi
匹配左雙引號。

右引號
:Pf
匹配單引號和右雙引號。

劃線號
:Pd
匹配劃線號。

連接號
:Pc
匹配下劃線符號。

其他標點
:Po
匹配 (,)、?、"、!、@、#、%、&、*、\、(:)、(;)、' 和 /。

空格分隔符
:Zs
匹配空格。

行分隔符
:Zl
匹配 Unicode 字元 U+2028。

段落分隔符
:Zp
匹配 Unicode 字元 U+2029。

不佔位標記
:Mn
匹配不佔位標記。

合並標記
:Mc
匹配合並標記。

封閉標記
:Me
匹配封閉標記。

數學符號
:Sm
匹配 +、=、~、|、< 和 >。

貨幣符號
:Sc
匹配 $ 和其他貨幣符號。

修飾符號
:Sk
匹配修飾符號,如抑揚符、重音符和長音符。

其他符號
:So
匹配其他符號,如版權符號、段落標記和度數符號。

其他控制
:Cc
匹配行尾。

其他格式
:Cf
格式化控制字元,如雙向控制字元。

代理項
:Cs
匹配代理項對的一半。

其他專門用途
:Co
匹配任何專用區域的字元。

其他未分配字元
:Cn
匹配未映射到 Unicode 字元的字元。

除了標準的 Unicode 字元屬性以外,還可以將下列附加屬性指定為字元集的一部分。

表達式

語法

說明:

字母
:Al
匹配任何單字元。例如,:Alhe 匹配「The」、「then」 和「reached」之類的字。

Numeric
:Nu
匹配任何數字。

標點
:Pu
匹配任意一個標點符號,如 ?、@、' 等等。

空格
:Wh
匹配任何類型的空格,包括印刷空格和表意空格。

雙向
:Bi
匹配自右至左書寫的字元,如阿拉伯語和希伯萊語字元。

朝鮮文字
:Ha
匹配朝鮮文字字母和組合字母。

平假名
:Hi
匹配平假名字元。

片假名
:Ka
匹配片假名字元。

象形/漢字/日文漢字
:Id
匹配象形字元,如漢字和日文漢字。

Ⅶ 用C#和sql2005,美化datagridview

的最佳方法就是實際嘗試一下,無需配置任何屬性。就像 DataGrid 一樣,您可以使用 DataSource 屬性來綁定 DataTable 對象(或從 DataTable 派生的對象)。

Dim ds As DataSet = GetDataSet()DataGridView1.DataSource = ds.Tables("Customers")
與 DataGrid 不同的是,DataGridView 一次只能顯示一個表。如果綁定整個 DataSet,則不會顯示任何數據,除非您使用要顯示的表名設置了 DataMember 屬性。

DataGridView1.DataSource = dsDataGridView1.DataMember = "Customers"
美化 DataGridView
datagridview 的默認外觀僅僅比 DataGrid 略有改進,但是使用幾項快速調整功能,您可以將其顯著改進。

其中的一個問題就是列無法自動展開以適合其包含的數據。您可以使用 DataGridView.AutoSizeColumns() 方法以及 枚舉中的某個值來解決此問題。您可以選擇根據標題文本、當前顯示的行或表中的所有行的的寬度來調整列寬。

' 根據標題或此列的某一行中' 最長一段文本的寬度調整' 列寬。DataGridView1.AutoSizeColumns( _.HeaderAndRows)
請記住,此方法必須在綁定數據後調用,否則不會產生任何效果。你可能還需要在用戶編輯數據後使用它(可能在響應 DataGridView.CellValueChanged 等事件時)。

如果不增加列寬,則可以更改行高。默認情況下,列中的文本會跨越多行。如果您使用 DataGridView.AutoSizeRows() 方法,則行會根據其中的內容調整高度。使用此方法前,您可能希望增加列寬,尤其是在欄位包含大量文本時。例如,以下代碼片段使「說明」列的列寬增加為原列寬的四倍,然後調整行高以容納其內容。

DataGridView.Columns("Description").Width *= 4DataGridView.AutoSizeRows( _DataGridViewAutoSizeRowsMode.HeaderAndColumnsAllRows)
比較了自動調整 DataGridView 大小的各種方法。

另一個合理的更改是清理每一列中顯示的標題文本。例如,標題「order Date」比欄位名稱「OrderDate」看上去更為專業。這項更改很容易進行。您只需從 DataGridView.Columns 集合中檢索相應的 DataGridViewColumn,並修改其 HeaderText 屬性:

DataGridView.Columns("OrderID").HeaderText = "Order ID"

使用 DataGridView 選擇單元格
默認情況下,datagridview 允許自由選擇。用戶可以突出顯示單元格或單元格組,可以一次突出顯示所有單元格(通過單擊網格右上角的方塊),還可以突出顯示一行或多行(通過在行標題列中單擊)。根據選擇模式,用戶甚至能夠通過選擇列標題來選擇一列或多列。通過使用 DataGridViewSelectionMode 枚舉中的某個值來設置 DataGridView.SelectionMode 屬性,可以控制此行為,如下所述:
通過 DataGridView,可以使用以下三個屬性方便地檢索選定的單元格:SelectedCells、SelectedRows 和 SelectedColumns。無論使用的是哪種選擇模式,SelectedCells 都始終返回 DataGridViewCell 對象的集合。另一方面,如果使用行標題選擇了整個行,則 SelectedRows 只返回信息,而如果使用列標題選擇了整個列,則 SelectedColumns 也只返回信息。

例如,以下代碼片段將檢查選定的整個行。只要找到一行,它就會在消息框中顯示 CustomerID 列中的相應值:

For Each SelectedRow As DataGridViewRow In _DataGridView1.SelectedRowsMessageBox.Show( _SelectedRow.Cells("CustomerID").Value)Next
使用 CurrentCell 或 CurrentCellAddress 屬性檢索對當前單元格的引用也同樣簡單。使用 DataGridView 時,您會注意到當前單元格被一個矩形圍住,看起來像是一個用黑色虛線繪制的方框。這就是用戶當前所在的位置。

currentcelladdress 屬性是只讀的,但是您可以使用 CurrentCell 以編程方式更改當前位置。完成此操作後,DataGridView 將被滾動以使當前位置可見。

' 移至第十一行的第四個單元格。DataGridView.CurrentCell = _DataGridView.Rows(10).Cells(3)

DataGridView 對象
到目前為止,您已經了解了如何與當前選定的一組行、單元格和列進行交互。datagridview 提供了兩個關鍵集合,用於處理整個數據集。這兩個集合分別是 Columns(DataGridViewColumn 對象的集合)和 Rows(DataGridViewRow 對象的集合,每個對象都引用一組 DataGridViewCell 對象的集合)。 顯示了對象模型。

一般而言,您將使用 DataGridViewColumn 對象來配置列顯示屬性、格式設置及標題文本,而使用 DataGridViewRow 和 DataGridViewCell 對象從綁定的記錄中檢索實際數據。在 DataGridViewCell 中修改數據時,處理方式與用戶編輯的方式相同:引發相應的 DataGridView 更改事件,並且修改底層的 DataTable。

現在您已經了解了 DataGridView 對象模型,因此可以輕松地創建遍歷該表的代碼。要選擇行、列或單元格,只需找到對應的 DataGridViewRow、DataGridViewColumn 或 DataGridViewCell 對象,並將 IsSelected 屬性設置為 True。

以下示例以編程方式選擇 OrderID 欄位的值小於 100 的所有行:

For Each Row As DataGridViewRow In DataGridView1.RowsIf Row.Cells("OrderID").Value < 100 ThenRow.Selected = TrueEnd IfNext
值得一提的是,有幾個從 DataGridViewColumn 派生的不同的類。這些類可以控制在單元格中顯示和編輯值的方式。.NET 包括五個預先創建的 DataGridView 列類:DataGridViewButtonColumn、DataGridViewCheckBoxColumn、DataGridViewComboBoxColumn、DataGridViewImageColumn 和 DataGridViewTextBoxColumn。

DataGridView 樣式
設計 DataGridView 時面臨的挑戰之一就是創建一個格式設置系統,該系統要能夠足夠靈活地應用不同級別的格式設置,而對於非常大的表又要保持高效。從靈活性角度來看,最好的方法是允許開發人員分別配置每個單元格。但是從效率角度來看,這種方法可能是有害的。包含數千行的表中具有好幾萬個單元格,維護每個單元格的不同格式肯定會浪費很多內存。

為解決此問題,datagridview 通過 DataGridViewCellStyle 對象來實現多層模型。DataGridViewCellStyle 對象表示單元格的樣式,並且包括如顏色、字體、對齊、換行和數據格式等詳細信息。您可以創建一個 DataGridViewCellStyle 來指定整個表的默認格式。此外,還可以指定列、行和各個單元格的默認格式。格式設置的越細致、創建的 DataGridViewCellStyle 對象越多,該解決方案的可伸縮性也就越小。但是,如果您主要使用基於列和基於行的格式設置,並且只是偶爾設置各個單元格的格式,則與 DataGrid 相比,DataGridView 不需要太多內存。

datagridview 應用格式設置時,將遵循以下優先順序(從最高到最低):

1. DataGridViewCell.Style 2. DataGridViewRow.DefaultCellStyle 3. DataGridView. 4. DataGridView.RowsDefaultCellStyle 5. DataGridViewColumn.DefaultCellStyle6. DataGridView.DefaultCellStyle
重要的是要清楚:樣式對象不是以「全有/全無」的方式應用的,datagridview 會檢查每個屬性。例如,假設您的單元格使用 DataGridViewCell.Style 屬性來應用自定義字體,但沒有設置自定義前景色。結果,該字體設置將覆蓋任何其他樣式對象中的字體信息,但如果層次結構中下一個樣式對象的前景色不為空,則將從該對象繼承前景色(在這種情況下為 DataGridViewRow.DefaultCellStyle)。

datagridviewcellstyle 定義了兩種格式設置:數據和外觀。數據格式設置描述顯示數據綁定值之前如何對其進行修改。這種格式設置通常包括使用格式設置字元串將數字或日期值轉換為文本。要使用數據格式設置,只需使用 DataGridViewCellStyle.Format 屬性設置格式定義或自定義格式字元串即可。

例如,以下代碼片段對 UnitCost 欄位中的所有數字進行格式設置,以將它們顯示為貨幣值,保留兩位小數並加上在區域設置中定義的相應貨幣符號:

DataGridView1.Columns("UnitCost"). _DefaultCellStyle.Format = "C"
外觀格式設置包括顏色和格式等表面細節。例如,以下代碼右對齊 UnitCost 欄位、應用粗體並將單元格的背景更改為黃色:

DataGridView1.Columns("UnitCost"). _DefaultCellStyle.Font = _New Font(DataGridView.Font, FontStyle.Bold)DataGridView1.Columns("UnitCost"). _DefaultCellStyle.Alignment = _DataGridViewContentAlignment.MiddleRightDataGridView1.Columns("UnitCost"). _DefaultCellStyle.BackColor = Color.LightYellow
其他與格式設置相關的屬性包括 ForeColor、SelectionForeColor、SelectionBackColor、WrapMode(控制文本在空間允許時是跨越多行還是直接截斷)及 NullValue(將替代 Null 值的值)。

datagridview 還包括一個設計器,用於在設計時配置列樣式。只需從「Properties」(屬性)窗口中選擇「DataGridView Properties」(DataGridView 屬性)鏈接,或者從各種預先創建的樣式設置中選擇「AutoFormat」(自動套用格式)。

自定義單元格格式
單元格格式設置的第一種方法是設置更高級別的 DataGridView、DataGridViewColumn 和 DataGridViewRow 屬性。但是,有時您需要為特定單元格單獨設置樣式。例如,您可能需要在列中的數據大於或小於某個值時標記該列中的數據。例如,突出顯示項目計劃列表中已過去的到期日期,或者在銷售分析中突出顯示負收益率。在這兩種情況下,您需要對單獨的單元格進行格式設置。

了解 DataGridView 對象模型後,您可能想要遍歷特定列中的單元格集合,以尋找要突出顯示的值。這種方法是可行的,但不是最好的方法。關鍵問題是如果用戶編輯了數據,或者如果代碼更改了綁定的數據源,不會對單元格的突出顯示情況進行相應的更新。

幸運的是,datagridview 針對此目的提供了 CellFormatting 事件。CellFormatting 只在顯示單元格值之前引發。通過該事件,可以基於單元格的內容來更新單元格樣式。以下示例檢查特定的客戶並相應地標記單元格:

Private Sub DataGridView1_CellFormatting( _ByVal sender As System.Object, _ByVal e As System.Windows.Forms. _) _Handles DataGridView1.CellFormatting' 檢查該列是否正確。If DataGridView1.Columns(e.ColumnIndex).Name = _"CustomerID" Then' 檢查該值是否正確。If e.Value = "ALFKI" Thene.CellStyle.ForeColor = Color.Rede.CellStyle.BackColor = Color.YellowEnd IfEnd IfEnd Sub
樣式不是影響網格外觀的唯一細節。您還可以隱藏列、在不同位置之間移動列,並「凍結」列,使這些列在用戶滾動到右端時仍然可見。這些功能都是通過 DataGridViewColumn 類的屬性提供的,如下所述:

?
?
?
? minimumwidth:將 Resizable 設置為 False,以防止用戶調整列寬;或者將 MinimumWidth 設置為允許的最小像素數目。
?

按鈕列
datagridview 提供的一種列是 DataGridViewButtonColumn,這種列在每一項旁邊顯示一個按鈕。您可以響應此按鈕的單擊事件,並使用它啟動其他操作或顯示新的表單。

以下示例使用按鈕文字「details...」創建簡單的按鈕列:

' 創建按鈕列。Dim Details As New DataGridViewButtonColumn()Details.Name = "Details"' 關閉數據綁定並顯示靜態文本。'(但是,您可以通過設置 DataPropertyName ' 屬性來使用該表中的屬性。)Details.DisplayTextAsFormattedValue = FalseDetails.Text = "Details..."' 清除標題。Details.HeaderText = ""' 添加該列。DataGridView1.Columns.Insert( _DataGridView1.Columns.Count, Details)
顯示了包含新列的網格。以下代碼會對任何行中的按鈕單擊事件做出反應,並顯示相應的記錄信息:

Private Sub DataGridView1_CellClick( _ByVal sender As System.Object, _ByVal e As System.Windows.Forms. _DataGridViewCellEventArgs) _Handles DataGridView1.CellClickIf DataGridView1.Columns(e.ColumnIndex).Name = _"Details" ThenMessageBox.Show("You picked " & _DataGridView1.Rows(e.RowIndex). _Cells("CustomerID").Value)End IfEnd Sub
比較現實的方案是,在此時創建並顯示一個新窗口,並將有關選定記錄的信息傳遞到這個新窗口,以便查詢並顯示完整的信息。

圖像列
datagridview 提供的另一種列是 DataGridViewImageColumn,這種列將在單元格邊框內顯示一個圖片。您可以設置 DataGridViewImageColumn.Layout 屬性以便配置圖片在單元格中的顯示方式:是將單元格擴展到適當的大小,還是將直接剪裁太大的圖像。

使用 DataGridViewImageColumn 的方法有兩種。首先,您可以採用與 DataGridViewButtonColumn 相同的方式手動創建並添加該列。如果您需要顯示 DataSet 本身不提供的相關圖像信息,則此列非常有用。例如,您可能需要獲取文件名(如 ProctPic002.gif),從網路驅動器讀取相應的文件,然後在網格中顯示該文件。為完成此操作,您需要對 DataGridView 事件(如 CellFormatting)做出反應,以便讀取相應行的圖片、獲取圖像數據並使用該列中的 Value 屬性將其插入。

如果 DataSet 包含不需要任何手動操作的二進制圖片數據,那麼事情會變得更加簡單。例如 SQL Server Pubs 資料庫中的 pub_info 表,該表包含公司徽標。綁定至此表時,您不需要執行任何額外步驟,DataGridView 將自動識別出您正在使用圖像,並會創建所需的 DataGridViewImageColumn。(有關這項技術的示例,請參閱本文的下載內容。)

編輯 DataGridView
眾所周知,datagrid 的用戶輸入功能很不靈活,您幾乎沒有辦法自定義單元格驗證方式及錯誤報告方式。而另一方面,DataGridView 允許您通過對在編輯過程的所有階段中引發的大量不同事件做出反應來控制其行為。

默認情況下,當用戶用滑鼠雙擊單元格或按 F2 鍵時,DataGridView 單元格將進入編輯模式。您還可以通過將 DataGridView.EditCellOnEnter 屬性設置為 True,對 DataGridView 進行配置,以便當用戶移到該單元格後,該單元格立即切換到編輯模式。您還可以使用 DataGridView 的 BeginEdit()、CancelEdit()、CommitEdit() 和 EndEdit() 方法通過編程方式開始和停止單元格編輯。用戶編輯單元格時,行標題將顯示一個鉛筆狀的編輯圖標。

用戶可以通過按 Esc 鍵來取消編輯。如果將 EditCellOnEnter 屬性設置為 True,則單元格仍將處於編輯模式,但是所有更改都將被放棄。要提交更改,用戶只需移到新的單元格,或將焦點切換到其他控制項。如果您的代碼可以移動當前單元格的位置,則此代碼也會提交更改。

為防止單元格被編輯,可以設置 DataGridViewCell、DataGridViewColumn、DataGridViewRow 或 DataGridView 的 ReadOnly 屬性(取決於您是要防止對該單元格進行更改、對該列中的所有單元格進行更改、對該行中的所有單元格進行更改,還是要防止對該表中的所有單元格進行更改)。DataGridView 還提供了 CellBeginEdit 事件,用於取消嘗試的編輯。

處理錯誤
默認情況下,datagridviewtextboxcolumn 允許用戶輸入任何字元,包括當前單元格中可能不允許使用的那些字元。例如,用戶可以在數字欄位中鍵入非數字字元,也可以指定與 DataSet 中定義的 ForeignKeyConstraint 或 UniqueConstraint 沖突的值。DataGridView 採用不同的方式來處理這些問題:

?
?

這些處理方式適用於大多數情況。但是,如果需要,您也可以通過響應 DataGridView.DataError 事件來參與錯誤處理,該事件是在 DataGridView 偵聽到來自數據源的錯誤時引發的。

驗證輸入
驗證是一項與錯誤處理稍有不同的任務。通過錯誤處理,您可以處理由 DataSet 報告的問題。而通過驗證,您可以捕獲您自己定義的錯誤情況,例如 DataSet 中允許的數據在應用程序中卻沒有意義。

當用戶通過導航到新的單元格提交更改時,datagridview 控制項將引發 CellValidating 和 CellValidated 事件。這些事件之後是 RowValidating 和 RowValidated 事件。您可以響應這些事件,檢查用戶輸入的值是否正確,並執行所需的任何後期處理。如果值無效,通常您會通過兩種方式來做出響應,即取消更改和單元格導航(通過將 EventArgs 對象的 Cancel 屬性設置為 True),或者設置某種錯誤文本來提醒用戶。可以將錯誤文本置於其他控制項中,也可以使用相應的 DataGridViewRow 和 DataGridViewCell 的 ErrorText 屬性在 DataGrid 中顯示錯誤文本:

?
?

通常,您會結合使用這兩種屬性,並設置行和單元格中的錯誤消息。以下示例檢查 CompanyName 欄位中太長的文本輸入。如果發現有問題的值,則會將錯誤符號(紅色的感嘆號)添加到單元格中,並顯示描述該問題的工具提示文本。

Private Sub DataGridView1_CellValidating( _ByVal sender As System.Object, _ByVal e As System.Windows.Forms. _) _Handles DataGridView1.CellValidatingIf DataGridView1.Columns(e.ColumnIndex).Name = _"CompanyName" ThenIf CType(e.FormattedValue, String).Length > _50 ThenDataGridView1.Rows( _e.RowIndex).Cells(e.ColumnIndex). _ErrorText = _"The company name is too long."End IfEnd IfEnd Sub
表列約束選擇
使用驗證可以捕獲任何錯誤情況。但是,這種方法不一定是最好的,因為它允許用戶輸入無效的內容,然後在事實出現後嘗試改正無效輸入。更好的解決方案是使用戶在一開始就無法輸入任何無效的內容。

一個常見例子就是您需要將列限制在預定義值列表的范圍內。在此示例中,對於用戶而言,最簡單的辦法是從列表中選擇正確的值,而不要手動鍵入值。最大的優勢在於,您可以使用 DataGridViewComboBoxColumn 非常方便地實現此設計。

可以使用 Items 集合手動為 DataGridViewComboBoxColumn 添加項列表,就像使用 ListBox 一樣。此外,還可以將 DataGridViewComboBoxColumn 綁定到其他數據源。在這種情況下,您可以使用 DataSource 屬性來指定數據源,並使用 DisplayMember 屬性指示列中應顯示的值,以及使用 ValueMember 屬性指定底層列值應使用的值。

為了演示這種情況,來看看下一個有關 Procts 表的示例。此表中的每一條記錄都通過其 CategoryID 欄位鏈接至 Categories 表中的記錄。要更改產品類別,用戶需要記住正確的 ID,並將其輸入到 CategoryID 欄位中。更好的解決方案是使用與 Categories 表綁定的 DataGridViewComboBoxColumn。此列將使用 CategoryName 作為顯示值,但是會將 CategoryID 作為真正的底層值。此列仍將通過 DataPropertyName 屬性與 Procts 表綁定在一起,這意味著當用戶從列表中選擇新的 Category 時,產品記錄的 CategoryID 欄位將自動更改。

以下是配置此表所需的代碼:

' 刪除自動生成的 CategoryID 列。DataGridView1.Columns.Remove("CategoryID")' 為 CategoryID 創建列表列。Dim List As New DataGridViewComboBoxColumn()List.DisplayIndex = 0List.HeaderText = "Category"' 此列綁定至' Procts.CategoryID 欄位。List.DataPropertyName = "CategoryID"' 該列表將從 Categories 表獲得數據。List.DataSource = ds.Tables("Categories")List.DisplayMember = "CategoryName"List.ValueMember = "CategoryID"' 添加該列。DataGridView1.Columns.Add(List)

小結
本文概要介紹了最值得期待的 .NET 新控制項之一:DataGridView。與 DataGrid 不同的是,DataGridView 適用於各種不同的現實情況——無論是要處理數據綁定和用戶編輯,還是僅涉及靜態文本顯示,都可以採用 DataGridView。簡而言之,本文讓您近距離了解了 .NET Framework 提供的一體化數據解決方案,以及 Windows 窗體開發人員升級至 .NET 2.0 的最引人注目的原因之一。

有關 Visual Studio .NET Developer 和 Pinnacle Publishing 的詳細信息,請訪問它們的 Web 站點 。

注意:這不是 Microsoft Corporation 的 Web 站點。Microsoft 對其內容不承擔任何責任。

本文轉載自 2005 年 1 月份的 Visual Studio .NET Developer。

熱點內容
格物致知編程 發布:2025-07-16 18:07:54 瀏覽:947
戴爾伺服器系統設置如何設置 發布:2025-07-16 18:02:09 瀏覽:958
為什麼換安卓這么難 發布:2025-07-16 17:14:44 瀏覽:421
轉動密碼鎖怎麼開 發布:2025-07-16 17:14:37 瀏覽:611
伺服器和網關ip 發布:2025-07-16 17:09:35 瀏覽:930
如何用net映射伺服器盤符 發布:2025-07-16 17:08:50 瀏覽:13
小飛機android 發布:2025-07-16 16:51:00 瀏覽:236
python獲取api 發布:2025-07-16 16:35:28 瀏覽:740
安卓應用耗電優化是什麼 發布:2025-07-16 16:29:39 瀏覽:502
惠普電腦都有什麼配置的 發布:2025-07-16 15:51:49 瀏覽:520