public static void ConvertRow() { TenantsListWindow TLW = (TenantsListWindow)TL; List<Quartecost> vd1 = TLW.tenantsDg.ItemsSource as List<Quartecost>; for (int i = 0; i < vd1.Count; i++) { //Quartecost quarte = TLW.tenantsDg.Items[i] as Quartecost; //string state = quarte.State.Trim(); if (vd1[i].state == "已交") { var row = TLW.tenantsDg.ItemContainerGenerator.ContainerFromItem(quarte) as DataGridRow; row.Background = new SolidColorBrush(Colors.DarkSeaGreen); } else { var row = TLW.tenantsDg.ItemContainerGenerator.ContainerFromItem(quarte) as DataGridRow; row.Background = new SolidColorBrush(Colors.IndianRed); } } }
if (vd1[i].state == "已交") { (TLW.tenantsDg.ItemContainerGenerator.ContainerFromItem(quarte) as DataGridRow).Background = new SolidColorBrush(Colors.DarkSeaGreen); }
{
TenantsListWindow TLW = (TenantsListWindow)TL;
List<Quartecost> vd1 = TLW.tenantsDg.ItemsSource as List<Quartecost>;
for (int i = 0; i < vd1.Count; i++)
{
//Quartecost quarte = TLW.tenantsDg.Items[i] as Quartecost;
//string state = quarte.State.Trim();
if (vd1[i].state == "已交")
{
var row = TLW.tenantsDg.ItemContainerGenerator.ContainerFromItem(quarte) as DataGridRow;
row.Background = new SolidColorBrush(Colors.DarkSeaGreen);
}
else
{
var row = TLW.tenantsDg.ItemContainerGenerator.ContainerFromItem(quarte) as DataGridRow;
row.Background = new SolidColorBrush(Colors.IndianRed);
}
}
}
我把它放在窗口的loaded事件中不行,我把它放在Datagrid的loaded事件中也不行
我把它放在窗口的loaded事件中不行,我把它放在Datagrid的loaded事件中也不行
我把它放在窗口的loaded事件中不行,我把它放在Datagrid的loaded事件中也不行
就放在原来的位置
我把它放在窗口的loaded事件中不行,我把它放在Datagrid的loaded事件中也不行
我把它放在窗口的loaded事件中不行,我把它放在Datagrid的loaded事件中也不行
就放在原来的位置放在窗口的ContentRendered里没用啊?如果放在这里的话我选择类型点确定之后就不执行了
还是一样..
调用代码是这样的 private void leixingquedingBut_Click(object sender, RoutedEventArgs e)
{
ComboBoxItem cbi = (ComboBoxItem)leixingshaixuanCb.SelectedItem;
string item;
if (cbi != null)
{
item = (string)cbi.Tag; tenantsDg.ItemsSource = QuartecostDAL.GetAllCommunity(item,community);
CommunityManagerSystemTools.ConvertRowEdit();
//update = true;
}
else
MessageBox.Show("请选择一个类型","提示",MessageBoxButton.OK,MessageBoxImage.Error);
}
我测试一切正常 断点看下是不是那没那到数据
row 有没有拿到
{
string sql = "select * from T_Quartecost", name;
bool state;
DataTable table = CommunityManagerSystemTools.ExecuteDataTable(sql);
List<Quartecost> quartecostlist = new List<Quartecost>();
for (int i = 0; i < table.Rows.Count; i++)
{
DataRow row = table.Rows[i];
Quartecost quartecost = new Quartecost();
quartecost.Id = (long)row["ID"];
quartecost.Tid = (long)row["TID"];
quartecost.Name = (string)row["Name"];
name = quartecost.Name.Trim(); quartecost.Type = (string)row["Type"];
quartecost.Waterdosage = Convert.ToDecimal(row["Waterdosage"]);
quartecost.Watercost = Convert.ToDecimal(row["Watercost"]);
quartecost.Electricitydosage = Convert.ToDecimal(row["Electricitydosage"]);
quartecost.Electricitycost = Convert.ToDecimal(row["Electricitycost"]);
quartecost.Healthcost = Convert.ToDecimal(row["Healthcost"]);
quartecost.Elevatorcost = Convert.ToDecimal(row["Elevatorcost"]);
quartecost.Heatingcost = Convert.ToDecimal(row["Heatingcost"]);
quartecost.Total = Convert.ToDecimal(row["Total"]); Tenants tenants = TenantsDAL.GetByName(name);
if (tenants.Community.Trim() == community)
{
state = Convert.ToBoolean(row["State"]);
if (state == false)
{
quartecost.State = "未交";
}
else
quartecost.State = "已交"; quartecost.Time = (string)row["Time"];
quartecost.IsDel = Convert.ToBoolean(row["IsDel"]);
quartecost.IsInput = Convert.ToBoolean(row["IsInput"]); if (quartecost.IsDel == false)
{
if (filter != null)
{
if (quartecost.Type.Trim() == CommunityManagerSystemTools.ConvertDbType(filter))
quartecostlist.Add(quartecost);
else if (quartecost.State == filter)
quartecostlist.Add(quartecost);
}
else
{
quartecostlist.Add(quartecost);
}
}
}
}
return quartecostlist;
}
这是GetAllCommunity方法的代码
问题应该是在GetAllCommunity这个方法上
加一个处理
if (cbi != null)
{
item = (string)cbi.Tag;
tenantsDg.ItemsSource = QuartecostDAL.GetAllCommunity(item, community);
if(( TLW.tenantsDg.ItemsSource as List<Quartecost>).count>0)
{
执行ConvertRow函数的
}
}
还是一样row是空的而且有个很诡异的解决方法这样就能解决.....
我Q 3029913 能否帮忙看下?
{
(TLW.tenantsDg.ItemContainerGenerator.ContainerFromItem(quarte) as DataGridRow).Background = new SolidColorBrush(Colors.DarkSeaGreen);
}
这到底是什么问题....
能不能帮我远程看下? 我QQ 3029913
dataGrid.ItemsSource = DAL.GetAll();
if (!Window.GetWindow(dataGrid).IsVisible) Window.GetWindow(dataGrid).Show();
dataGrid.UpdateLayout();
foreach (var item in dataGrid.Items)
dataGrid.ScrollIntoView(item);
然后就可以调用dataGrid.ItemContainerGenerator.ContainerFromItem(item);取到DataGridRow。上面这种做法是不可取的,因为要一次性生成全部的DataGridRow,性能会有很大影响。
正确的做法是监听DataGridRow的加载事件,当row创建的时候再去对它进行处理:
dataGrid.LoadingRow += dataGrid_LoadingRow;void dataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
e.Row.Background =
}
DataGridRow row = e.Row;
Quartecost quartecost = (Quartecost)row.DataContext;
if(quartecost.State.Trim() == "已交")
row.Background = new SolidColorBrush(Colors.DarkSeaGreen);
else
row.Background = new SolidColorBrush(Colors.IndianRed);
//放在DataGrid的LoadingRow事件里我把答案贴出来吧,免得又有新手跟我一样,就这几行代码找了将近一礼拜.