此應用程序是一種留言板類型的應用程序。您發佈消息,該消息存儲在Oracle數據庫中。用戶的照片,姓名,日期和消息以列表視圖顯示。一切正常,但字體顏色變化的功能請求進來了。現在測試下面的東西,我知道我可以顯示所有的消息作爲一種特定的顏色。列表查看每個項目的ForeColor
我要做的是給我的表添加一個「顏色」列。然後,如果用戶選擇他們的消息文本爲「紅色」,例如,我將在該帖子的表格的顏色列中存儲紅色的十六進制顏色。
所以我試圖弄清楚什麼時候該消息被檢索到,我如何設置這個代碼爲'如果顏色列爲空,發送消息爲黑色,否則如果每個消息發佈了特定消息的十六進制顏色在那種顏色下'沒有改變每個消息的顏色爲紅色,如下面的代碼所做的那樣。
List<MsgBoard> Messages = MsgBoard.find_ActiveByBoardName(Convert.ToString(cmbgroup.SelectedItem));
int i = 0;
imageList1.Images.Clear();
foreach (MsgBoard m in Messages)
{
AddImages(m.EmpPic);
ListViewItem Message = new ListViewItem("", i);
if (m.AlertNo == 0) //Default Message Post (non Alert)
{
Message.UseItemStyleForSubItems = false;
Message.SubItems.Add(m.EmpName.First);
Message.SubItems.Add(m.MessageText + Environment.NewLine).ForeColor = Color.Red;
Message.SubItems.Add(m.PostDate.ToString());
Message.SubItems.Add(m.EmpName.EmpNo.ToString());
Message.SubItems.Add(m.EmpName.Name);
listView1.Items.Add(Message);
}
i++;
}
}
只是爲了澄清。如果20個人發佈消息,並且所有20個人選擇不同的顏色來發布他們的消息。所以在DB中,所有20行在DB列中具有不同的顏色,我需要根據他們的顏色分別在listview中顯示這些消息發佈爲。我目前只知道在listview中的所有消息中應用單一顏色,如上例中所示。
貌似感謝斯蒂芬,一旦我添加
Message.SubItems.Add(m.MessageText + Environment.NewLine).ForeColor = System.Drawing.ColorTranslator.FromHtml(m.Color);
然後我需要幫助調整我的查詢,添加顏色,一旦顏色添加到顏色列。這是代碼。
如果數據庫管理員添加了MESSAGE_COLOR varchar列。
我發帖時編輯此下方現有的代碼,爲新創建的列MESSAGE_COLOR ..
public string Create()
{
try
{
OleDbDataReader result = Database.Conn.Execute(
"INSERT INTO MPCS.MEYER_BOARD (" +
"EMPLOYEE_ID, " +
"POST_DATE, " +
"BOARD_NAME," +
"ALERT_NO," +
"MESSAGE_TEXT," +
"MESSAGE_COLOR," +
"ACTIVE_FLAG" +
") VALUES (?,SYSDATE,?,?,?,?)",
new List<OleDbParameter> {
new OleDbParameter("EMPLOYEE_ID",EmpName.EmpNo),
new OleDbParameter("BOARD_NAME",BoardName),
new OleDbParameter("ALERT_NO",AlertNo),
new OleDbParameter("MESSAGE_TEXT",MessageText),
new OleDbParameter("MESSAGE_COLOR",MessageColor),
new OleDbParameter("ACTIVE_FLAG",ActiveFlag ? "Y" : "N")
}, Query.ReaderType.Reader);
result.Read();
result.Close();
return null;
}
catch (Exception ex)
{
return ex.Message;
}
}
我然後編輯DB讀瓦特/新列也是如此。
public static MsgBoard DBRead(OleDbDataReader result,string alias=null)
{
return new MsgBoard
{
EmpName = Employee.DBRead(result, "EMPLOYEE"),
MessageText = result[alias + "MESSAGE_TEXT"].ToString(),
MessageColor = result[alias + "MESSAGE_COLOR"].ToString(),
BoardName = result[alias +"BOARD_NAME"].ToString(),
AlertNo = (int)(decimal)result[alias +"ALERT_NO"],
PostDate = (DateTime)result[alias +"POST_DATE"],
ActiveFlag = result[alias +"ACTIVE_FLAG"].ToString().ToString() == "Y",
EmpPic = ImageResource.DBRead(result, "IR")
};
}
但是,我需要編輯我的build_query嗎?
public static String build_query(String where, string OrderBy = null)
{
List<String> cols = new List<String>();
cols.AddRange(db_columns.ConvertAll(c => "MPCS.MEYER_BOARD." + c + " AS MBOARD_" + c));
cols.AddRange(Employee.db_columns.ConvertAll(c => "MPCS.EMPLOYEE." + c + " AS EMPLOYEE_" + c));
cols.AddRange(ImageResource.db_columns.ConvertAll(c => "MPCS.IMAGE_RESOURCE." + c + " AS IR_" + c));
String sql =
"SELECT " + String.Join(", ", cols) + " " +
"FROM MPCS.MEYER_BOARD " +
"LEFT OUTER JOIN MPCS.EMPLOYEE " +
"ON MPCS.MEYER_BOARD.EMPLOYEE_ID=MPCS.EMPLOYEE.EMPLOYEE_ID " +
"LEFT OUTER JOIN MPCS.IMAGE_RESOURCE " +
"ON MPCS.IMAGE_RESOURCE.IR_ID=MPCS.EMPLOYEE.IMAGE_RESOURCE_ID " +
"WHERE ";
sql += where;
sql += OrderBy;
return sql;
}
UPDATE
我已經得到了一切編碼,我現在提交的顏色數據庫。但是,在每個帖子下方顯示列表視圖時,仍然只有默認的黑色文本顏色。而不是保存爲例如「#FFF000」被轉換和顯示的顏色。
foreach (MsgBoard m in Messages)
{
AddImages(m.EmpPic);
ListViewItem Message = new ListViewItem("", i);
if (m.AlertNo == 0) //Default Message Post (non Alert)
{
Message.SubItems.Add(m.EmpName.First);
Message.SubItems.Add(m.MessageText + Environment.NewLine).ForeColor = System.Drawing.ColorTranslator.FromHtml(m.MessageColor);
Message.SubItems.Add(m.PostDate.ToString());
Message.SubItems.Add(m.EmpName.EmpNo.ToString());
Message.SubItems.Add(m.EmpName.Name); //Displayed only on 'Show Details'
listView1.Items.Add(Message);
}
最後更新
原來的最後一塊我缺的是改變列表視圖屬性UseItemStyleForSubItems = false;
現在它的工作。
那麼你如何訪問存儲的顏色?如果它是一個'int',你可以簡單地寫'.ForeColor = Color.FromArgb(yourIntValue)'..並且從DBMS讀入一個默認值'0'也不成問題。通過十六進制是一種選擇,但沒有什麼意義,除非有人真的可以閱讀/理解/編輯它們。 – TaW
發佈人永遠不會看到十六進制。問題不在於檢索顏色,而是超過1個。因此,如果20個人發佈可能具有20種不同顏色的消息。按照我的例子,listview將所有消息發佈到設置的顏色。我試圖找出如何根據發佈的人的顏色,在列表視圖中以每種顏色顯示每條消息,而不是像上面那樣顯示一種顏色的所有消息。 – Lee
不,每個[ListViewItem](https://msdn.microsoft.com/en-us/library/system.windows.forms.listviewitem%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396)都可以有它自己的顏色,包括前景和背景。如果您將顏色與消息一起存儲,它就可以正常工作。 – TaW