2012-06-08 53 views
1

好的,我現在要進行搜索了。通過在測試之前設計系統,看看它是否真的起作用,我似乎犯了一個錯誤。基本上,我提供了一個顏色對話框的提示來獲取用戶選擇的顏色。我正在使用此代碼:使用ColorDialog在數據網格中設置顏色

ColorDialog MyDialog = new ColorDialog(); 

// Keeps the user from selecting a custom color. 
MyDialog.AllowFullOpen = false; 
MyDialog.AnyColor = false; 

// Allows the user to get help. (The default is false.) 
MyDialog.ShowHelp = true; 
MyDialog.SolidColorOnly = true; 

// Open color selection dialog box 
MyDialog.ShowDialog(); 

functionValue = MyDialog.Color.Name; 
function = "highlight"; 
currentFunctionValue = MyDialog.Color.Name; 

functionValue被定義爲一個字符串,並且保存從數據庫中檢索的顏色。例如,「紅色」。後來,我用這個使用此代碼着色細胞的細胞或行中的數據網格:

if (ruleFunction[j] == "highlight") 
{ 
    Color color = Color.FromName(ruleFunctionValues[j]); 
    grdTransactions.Rows[i].Cells[index].Style.BackColor = color; 
} 

這工作正常,如果顏色名稱是「紅」,「藍」,等等。但是,一些對話框選擇返回諸如「ff8000」等顏色的其他十六進制表示的值。我想這會拋出Color.FromName函數,並且這些單元格不僅沒有顏色,而且已經在datagrid單元格中弄亂了文本。有沒有辦法讓它顯示用「ff8000」這樣的名稱選擇的顏色,或者從colorDialog選擇屏幕中排除這些顏色?我真的不想用顏色創建自己的自定義對話框,只要我能幫助它。如果有必要,我甚至會回去改變它在數據庫中的存儲方式。任何幫助,將不勝感激!

謝謝!

回答

0

不是存儲返回的名稱,而是存儲返回的顏色對象。然後,您可以直接將其分配,而不是去往和來自字符串值。

編輯:如果無法將其存儲爲顏色對象,則使用ToArgb的整數值。然後你可以使用FromArgb方法加載它。

Color c = Color.Red; 
int redColor = c.ToArgb(); 

//... 

this.BackColor = Color.FromArgb(redColor); 
+0

感謝您的回覆!我曾想過這樣做,但不幸的是我使用SQL compact 3.5 express。我可以分配字段的唯一值如下。我可以使用其中之一將其作爲對象存儲嗎? bigint,binary,bit,float,image,int,money,nchar,ntext,numeric,nvarchar,real,smallint,tinyint,uniqueidentifier,varbinary,rowversion。唯一看起來很接近的是「真實的」。這會起作用嗎? – user1420914

+0

我用一種將它作爲整數存儲的方式更新了答案。 –

+0

好的,謝謝!我會試試看! – user1420914