C# некоторые вопросы об изменении вида данных в бэк-цвете и результатах группы
Возможный дубликат:
C# изменить цвет строки, если она не пуста
У меня есть некоторые значения в моей таблице, и у меня есть несколько вопросов, как это изменить:
1. Я хочу изменить фон, если "KundeID" не пустой, чтобы фиолетовый, я попытался с --->
foreach (DataGridViewRow row1 in dataGridView2.Rows)
{
if (row1.Cells[2].Value != null)
{
row1.DefaultCellStyle.BackColor = Color.Violet;
}
}
но это окрашивает весь мой стол
2. Я хочу иметь два X в объекте 6,
object[] o5 = { 6, "XX", "Sprite"+"Jogurt" }; table.Rows.Add(o6);
Когда у меня есть 2 "Produkts" и я хочу показать это в своей таблице, не знаю как
Моя таблица:
KundeID KundeName Comment Jogurt Fanta Sprite
1 Michael "nichts" x //violet
2 Raj "Ich bin cool" //violet
Gary "yahoo" x
Miky x
5 MM x //violet
(6 XX x x) // Want to do two X's, violet
Мой код:
DataTable table = new DataTable("Kunde");
table.Columns.Add("KundeID", typeof(Int32));
table.Columns.Add("KundeName", typeof(String));
table.Columns.Add("Produkt", typeof(String));
DataTable comment = new DataTable("Comment");
comment.Columns.Add("KundeName", typeof(String));
comment.Columns.Add("Comment", typeof(String));
DataSet ds = new DataSet("DataSet");
ds.Tables.Add(table);
ds.Tables.Add(comment);
object[] o1 = { 1, "Michael", "Jogurt" };
object[] o2 = { 2, "Raj" };
object[] o3 = { null, "Gary", "Fanta" };
object[] o4 = { null, "Miky", "Sprite" };
object[] o5 = { 5, "MM", "Sprite" };
object[] c1 = { "Raj", "Ich bin cool" };
object[] c2 = { "Gary", "yahoo" };
object[] c3 = { "Michael", "nichts" };
table.Rows.Add(o1);
table.Rows.Add(o2);
table.Rows.Add(o3);
table.Rows.Add(o4);
table.Rows.Add(o5);
comment.Rows.Add(c1);
comment.Rows.Add(c2);
comment.Rows.Add(c3);
var results = from table1 in table.AsEnumerable()
join table2 in comment.AsEnumerable()
on table1.Field<string>("KundeName") equals table2.Field<string>("KundeName") into prodGroup
from table4 in prodGroup.DefaultIfEmpty()
select new
{
KundeID = table1.Field<Int32?>("KundeID"),
KundeName = table1.Field<String>("KundeName"),
Produkt = table1.Field<String>("Produkt"),
Comment = table4 != null ? table4.Field<String>("Comment") : null,
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
var result = new DataTable();
result.Columns.Add("KundeID", typeof(Int32));
result.Columns.Add("KundeName", typeof(String));
result.Columns.Add("Comment", typeof(String));
result.Columns.AddRange(
(from c in
(from r in table.AsEnumerable()
where !r.IsNull("Produkt") && !string.IsNullOrEmpty(r.Field<string>("Produkt"))
select r.Field<string>("Produkt")).Distinct()
select new DataColumn(c, typeof(bool))).ToArray()
);
foreach (var r in results)
{
var productIndex = result.Columns.IndexOf(r.Produkt);
var vals = new List<object>() { r.KundeID, r.KundeName, r.Comment };
for (int i = 3; i < result.Columns.Count; i++)
{
if (i == productIndex)
{
vals.Add(true);
}
else
{
vals.Add(false);
}
}
result.LoadDataRow(vals.ToArray(), true);
}
dataGridView2.DataSource = result ;
//Here will change all background to violet, I want just some of them
//foreach (DataGridViewRow row1 in dataGridView2.Rows)
//{
// if (row1.Cells[2].Value != null)
// {
// row1.DefaultCellStyle.BackColor = Color.Violet;
// }
//}
}
1 ответ
Для ASPX (Grid): подключить OnRowDataBound
чтобы добавить цвет к вашим строкам:
<asp:GridView ID="dataGridView2" runat="server" OnRowDataBound="RowDataBound" />
И поместите это в ваш файл Code-Behind:
protected void RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowIndex == -1)
{
return;
}
if(!string.IsNullOrEmpty(e.Row.Cells[2].Text))
{
e.Row.BackColor = Color.Violet;
}
}
Для WINFORMS: подключите DataBindingComplete
событие, либо прикрепив событие, как показано ниже, либо используя конструктор:
dataGridView1.DataBindingComplete += new DataGridViewBindingCompleteEventHandler(dataGridView1_DataBindingComplete);
Тогда в обработчике у вас есть что-то вроде этого:
private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
if (e.ListChangedType != ListChangedType.ItemDeleted)
{
DataGridViewCellStyle violet = dataGridView1.DefaultCellStyle.Clone();
violet.BackColor = Color.Violet;
foreach (DataGridViewRow r in dataGridView1.Rows)
{
if (r.Cells[2].Value != null)
{
r.DefaultCellStyle = violet;
}
}
}
}