이 응용 프로그램은 응용 프로그램의 메시지 보드 유형입니다. Oracle 데이터베이스에 저장된 메시지를 게시합니다. 사용자의 사진, 이름, 날짜 및 메시지가 목록보기에 표시됩니다. 그러나 글꼴 색상 변경에 대한 기능 요청이 모두 들어 왔습니다. 아래의 항목을 테스트하면 모든 메시지를 특정 색상으로 표시 할 수 있습니다.목록보기 항목 별 ForeColor
내가 할 일은 테이블에 '색상'열을 추가하는 것입니다. 그런 다음 사용자가 메시지의 텍스트를 '빨간색'으로 선택하면 해당 게시물의 표의 색상 열에 빨간색의 16 진수 색상을 저장하게됩니다.
그래서 내가 알아 내려고하는 것은 메시지를 가져올 때 '이 색을 빈칸으로 채우면 검은 색으로 메시지를 게시 할 수 있습니다. 아래의 코드 에서처럼 모든 메시지의 색상을 빨간색으로 변경하지 않고 해당 색상으로 표시합니다.
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);
를 추가하면
는 스테판에게 감사 같은데. 여기에 그 코드가 있습니다.
가드 DB 관리자가 MESSAGE_COLOR varchar 열을 추가했습니다. 게시 할 때
나는 다음 DB뿐만 아니라 새 열/w를 읽고 편집이
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;
}
}
.. 새로 만든 열 MESSAGE_COLOR를 들어, 기존의 코드에 아래이를 편집 할 수 있습니다.
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
내가받은 모든 코딩 봤는데, 지금은 DB에 색상을 제출하고있다. 그러나 각 게시물 아래 목록보기를 표시 할 때 여전히 기본 검정 텍스트 색이 있습니다. 예를 들어 "# 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'으로 읽는 것도 문제가 아닙니다. 16 진수를 거치는 것은 옵션이지만 누군가 실제로 읽거나 이해/편집 할 수 없으면 거의 이해가되지 않습니다. – TaW
게시자는 헥스를 보지 않습니다. 문제는 색을 되 찾는 것이 아니라 1을 넘는 것입니다. 따라서 20 명의 사람들이 잠재적으로 20 가지 색상의 메시지를 게시합니다. 내 예제에 따라 listview는 모든 메시지를 설정된 색상으로 게시합니다. 색상을 게시 한 사람을 기준으로 listview의 각 메시지를 위와 같은 모든 메시지가 아닌 개별 색으로 표시하는 방법을 알아 내려고합니다. – Lee
아니요, 각 [ListViewItem] (https://msdn.microsoft.com/en-us/library/system.windows.forms.listviewitem%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396) 전경색과 배경색 모두 고유 한 색상을 유지해야합니다. 메시지와 함께 색상을 저장하면 정상적으로 작동합니다. – TaW