Это приложение представляет собой тип приложения для сообщений. Вы отправляете сообщение, которое хранится в базе данных Oracle. Фотография пользователя, имя, дата и сообщение пользователя отображаются в виде списка. Однако все работает, но появился запрос функции для изменения цвета шрифта. Теперь, проверяя вещи ниже, я знаю, что могу отображать ВСЕ сообщения в виде определенного цвета.Listview 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 выбирают другой цвет для размещения своего сообщения. Таким образом, в БД все 20 строк имеют разный цвет в столбце БД, мне нужно, чтобы эти сообщения отображались в виде списка отдельно в зависимости от цвета, который они размещен как. В настоящее время я знаю только о применении одного цвета ко всем сообщениям в списке, как показано в моем примере выше.
Похоже, благодаря Стефан, когда я добавить
Message.SubItems.Add(m.MessageText + Environment.NewLine).ForeColor = System.Drawing.ColorTranslator.FromHtml(m.Color);
тогда мне нужно помочь регулировать мой запрос, чтобы добавить цвет, как только цвета добавляются к колонке цвета. Вот этот код.
Администратор базы данных DB добавляет столбец 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;
}
}
Я тогда редактирование БД чтения ж/новый столбец, а также.
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);
}
Окончательное обновление
Оказывается, последний кусок я не хватало, чтобы изменить свойство ListView UseItemStyleForSubItems = false;
в настоящее время его работы.
Как вы можете получить доступ к сохраненному цвету? если это 'int', вы можете просто написать' .ForeColor = Color.FromArgb (yourIntValue) '.. И чтение в значение по умолчанию' 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