C# 使用AutoGeneratingColumn向dataGrid插入背景色
我不擅长使用WPF,实际上这是我第一次使用它。这就是为什么我需要你的帮助 我有一个具有AutoGeneratingColumn的DataGrid,我想在DataGrid上创建一些样式。但很难给它添加一些风格。我有一个复选框,当选中时,它将生成一个包含静态数据的行 这是我的XAML代码C# 使用AutoGeneratingColumn向dataGrid插入背景色,c#,wpf,xaml,C#,Wpf,Xaml,我不擅长使用WPF,实际上这是我第一次使用它。这就是为什么我需要你的帮助 我有一个具有AutoGeneratingColumn的DataGrid,我想在DataGrid上创建一些样式。但很难给它添加一些风格。我有一个复选框,当选中时,它将生成一个包含静态数据的行 这是我的XAML代码 这是我的.cs代码 public部分类入口管道:UserControl { 私有字符串容器; mySepProject项目; MySepBLL MySepBLL=新的MySepBLL(); 私有对象单元; pu
这是我的.cs代码
public部分类入口管道:UserControl
{
私有字符串容器;
mySepProject项目;
MySepBLL MySepBLL=新的MySepBLL();
私有对象单元;
public virtual System.Drawing.Color BackColor{get;set;}
公共入口管道(管柱容器ID)
{
vesselID=vesselID;
mySepProject=(Project)App.Current.Properties[“myp_projects”];
初始化组件();
Vesser-Vessel=mySepBLL.GetVessel(vesselID,mySepProject.Vessers);
LoadInletPipingData(容器入口);
LoadResultsComboBox(容器入口);
}
公共void重载inlinepiping()
{
mySepProject=(Project)App.Current.Properties[“myp_projects”];
Vesser-Vessel=mySepBLL.GetVessel(vesselID,mySepProject.Vessers);
LoadInletPipingData(容器入口);
LoadResultsComboBox(容器入口);
}
专用void LoadResultsComboBox(列出入口)
{
cmbResults.Items.Clear();
foreach(入口中的入口)
{
if(入口IsActive)
{
ComboBoxItem cmbitm=新ComboBoxItem();
cmbitm.Content=“入口管”+入口类型编号;
cmbitm.Tag=入口;
cmbitm结果.项目.添加(cmbitm);
}
}
cmbResults.SelectedIndex=0;
}
专用空隙荷载入口管道入口结果(入口)
{
DataTable dt=新的DataTable();
DataColumn description=新的DataColumn(“description”,typeof(string));
DataColumn单位=新的DataColumn(“单位”,类型(字符串));
DataColumn case1=新的DataColumn(“案例1”,类型(字符串));
DataColumn case2=新的DataColumn(“案例2”,类型(字符串));
DataColumn case3=新的DataColumn(“案例3”,类型(字符串));
DataColumn case4=新的DataColumn(“案例4”,类型(字符串));
DataColumn case5=新的DataColumn(“案例5”,类型(字符串));
DataColumn case6=新的DataColumn(“Case 6”,typeof(string));
DataColumn max=新的DataColumn(“max”,typeof(string));
dt.列.添加(说明);
dt.列.加(单位);
dt.列。添加(案例1);
dt.列。添加(案例2);
dt.列。添加(案例3);
dt.列。添加(案例4);
dt.列。添加(案例5);
dt.列。添加(案例6);
dt.Columns.Add(最大值);
bool isDisplayMistUserDefined=chkMistUserDefined.IsChecked==true?true:false;
//bool isDisplayMaxUserDefined=chkMaxUserDefined.IsChecked==true?true:false;
List cmistfractionP=新列表();
List cmistflowrate=新列表();
List cmistfractionU=新列表();
Cmistractionp.Add(“雾分数-预测”);
cmistfractionP.添加(“%”);
cmistfractionU.Add(“雾分数-用户定义”);
cmistfractionU.添加(“”);
CmistFlower.添加(“雾流量”);
CmistFlower.添加(“m/hr”);
双最大流量=0;
双最大分数=0;
对于(int i=0;imaxmistfraction?pipingcalc.MistFractionUserDefined:maxmistfraction;
MaxMistFlower=pipingcalc.MistFlower>MaxMistFlower?pipingcalc.MistFlower:MaxMistFlower;
添加(Double.IsNaN(pipingcalc.MistFractionUserDefined)?“”:pipingcalc.MistFractionUserDefined.ToString();
添加(Double.IsNaN(pipingcalc.MistFractionUserDefined)?“”:pipingcalc.MistFractionUserDefined.ToString();
cmistflowrate.Add(Double.IsNaN(pipingcalc.MistFlowRate)?“”:pipingcalc.MistFlowRate.ToString());
}
其他的
{
CMISTRACTIONP.添加(“”);
cmistfractionU.添加(“”);
CmistFlower。添加(“”);
}
}
cmistfractionP.Add(Double.IsNaN(maxmistfraction)?“”:maxmistfraction.ToString();
cmistfractionU.Add(Double.IsNaN(maxmistfraction)?“”:maxmistfraction.ToString();
cmistflowrate.Add(Double.IsNaN(maxmistflowrate)?“”:maxmistflowrate.ToString();
Add(cmistfractionP.ToArray());
if(isDisplayMistUserDefined)
添加(cmistfractionU.ToArray());
添加(cmistflowrate.ToArray());
dtgResults.ItemsSource=dt.DefaultView;
}
<DataGrid x:Name="dtgResults" ColumnWidth="*" AutoGeneratingColumn="dataGrid1_AutoGeneratingColumn">
<DataGrid.ColumnHeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="FontWeight"
Value="Bold" />
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</DataGrid.ColumnHeaderStyle>
</DataGrid>
<CheckBox x:Name="chkMistUserDefined" Grid.Column="0" HorizontalAlignment="Right" Click="chkMistUserDefined_Click"/>
<TextBlock Text="Override predicted misfraction" Grid.Column="1" HorizontalAlignment="Left"/>
public partial class InletPiping : UserControl
{
private string vesselID;
Project mySepProject;
MySepBLL mySepBLL = new MySepBLL();
private object cell;
public virtual System.Drawing.Color BackColor { get; set; }
public InletPiping(string vesselid)
{
vesselID = vesselid;
mySepProject = (Project)App.Current.Properties["myp_projects"];
InitializeComponent();
Vessel vessel = mySepBLL.GetVessel(vesselID, mySepProject.Vessels);
LoadInletPipingData(vessel.Inlets);
LoadResultsComboBox(vessel.Inlets);
}
public void ReloadInletPiping()
{
mySepProject = (Project)App.Current.Properties["myp_projects"];
Vessel vessel = mySepBLL.GetVessel(vesselID, mySepProject.Vessels);
LoadInletPipingData(vessel.Inlets);
LoadResultsComboBox(vessel.Inlets);
}
private void LoadResultsComboBox(List<Inlet> inlets)
{
cmbResults.Items.Clear();
foreach (Inlet inlet in inlets)
{
if (inlet.IsActive)
{
ComboBoxItem cmbitm = new ComboBoxItem();
cmbitm.Content = "Inlet pipe " + inlet.TypeNo;
cmbitm.Tag = inlet;
cmbResults.Items.Add(cmbitm);
}
}
cmbResults.SelectedIndex = 0;
}
private void LoadInletPipingResults(Inlet inlet)
{
DataTable dt = new DataTable();
DataColumn description = new DataColumn("Description", typeof(string));
DataColumn unit = new DataColumn("Unit", typeof(string));
DataColumn case1 = new DataColumn("Case 1", typeof(string));
DataColumn case2 = new DataColumn("Case 2", typeof(string));
DataColumn case3 = new DataColumn("Case 3", typeof(string));
DataColumn case4 = new DataColumn("Case 4", typeof(string));
DataColumn case5 = new DataColumn("Case 5", typeof(string));
DataColumn case6 = new DataColumn("Case 6", typeof(string));
DataColumn max = new DataColumn("Max", typeof(string));
dt.Columns.Add(description);
dt.Columns.Add(unit);
dt.Columns.Add(case1);
dt.Columns.Add(case2);
dt.Columns.Add(case3);
dt.Columns.Add(case4);
dt.Columns.Add(case5);
dt.Columns.Add(case6);
dt.Columns.Add(max);
bool isDisplayMistUserDefined = chkMistUserDefined.IsChecked == true ? true : false;
// bool isDisplayMaxUserDefined = chkMaxUserDefined.IsChecked == true ? true : false;
List<string> cmistfractionP = new List<string>();
List<string> cmistflowrate = new List<string>();
List<string> cmistfractionU = new List<string>();
cmistfractionP.Add("Mist fraction - predicted");
cmistfractionP.Add("%");
cmistfractionU.Add("Mist fraction - user defined");
cmistfractionU.Add("");
cmistflowrate.Add("Mist flow rate");
cmistflowrate.Add("m/hr");
double maxmistflowrate = 0;
double maxmistfraction = 0;
for (int i = 0; i < inlet.ProcessDataUnits.ProcessDataCaseInputs.Count; i++)
{
if (inlet.ProcessDataUnits.ProcessDataCaseInputs[i].IsActive)
{
PipingCalculation pipingcalc = new PipingCalculation(inlet.ProcessDataUnits.ProcessDataCaseInputs[i].GasFlowRate.Value, inlet.ProcessDataUnits.ProcessDataCaseInputs[i].GasDensity.Value,
inlet.ProcessDataUnits.ProcessDataCaseInputs[i].HCLiquidFlowRate.Value, inlet.InletPiping.ActualInsideDiameter.Value);
maxmistfraction = pipingcalc.MistFractionUserDefined > maxmistfraction ? pipingcalc.MistFractionUserDefined : maxmistfraction;
maxmistflowrate = pipingcalc.MistFlowRate > maxmistflowrate ? pipingcalc.MistFlowRate : maxmistflowrate;
cmistfractionP.Add(Double.IsNaN(pipingcalc.MistFractionUserDefined) ? "" : pipingcalc.MistFractionUserDefined.ToString());
cmistfractionU.Add(Double.IsNaN(pipingcalc.MistFractionUserDefined) ? "" : pipingcalc.MistFractionUserDefined.ToString());
cmistflowrate.Add(Double.IsNaN(pipingcalc.MistFlowRate) ? "" : pipingcalc.MistFlowRate.ToString());
}
else
{
cmistfractionP.Add("");
cmistfractionU.Add("");
cmistflowrate.Add("");
}
}
cmistfractionP.Add(Double.IsNaN(maxmistfraction) ? "" : maxmistfraction.ToString());
cmistfractionU.Add(Double.IsNaN(maxmistfraction) ? "" : maxmistfraction.ToString());
cmistflowrate.Add(Double.IsNaN(maxmistflowrate) ? "" : maxmistflowrate.ToString());
dt.Rows.Add(cmistfractionP.ToArray());
if (isDisplayMistUserDefined)
dt.Rows.Add(cmistfractionU.ToArray());
dt.Rows.Add(cmistflowrate.ToArray());
dtgResults.ItemsSource = dt.DefaultView;
}
private double GetMistFractionCalculation(double gasflowrate, double gasdensity, double hcliquidflowrate, double actualInsideDiameter)
{
double mistfraction = 0;
double gasflowrateOvergasdensity = (gasflowrate / gasdensity) / 3600; // if m3/hr = gasflowrate/3600
hcliquidflowrate = hcliquidflowrate / 3600;
actualInsideDiameter = actualInsideDiameter / 1000;
double partialcalc = gasflowrateOvergasdensity / (gasflowrateOvergasdensity + hcliquidflowrate);
double partialmul = 1 / actualInsideDiameter;
mistfraction = partialcalc * partialmul;
double hcliquid = hcliquidflowrate;
double mistflowrate = mistfraction * hcliquid;
mistfraction = mistfraction * 100;
mistflowrate = mistflowrate * 3600;
return mistfraction;
}
private void LoadInletPipingData(List <Inlet> inlets)
{
DataTable dt = new DataTable();
DataColumn inletno = new DataColumn("Inlet pipe #", typeof(string));
DataColumn pipeSize = new DataColumn("Pipe size (inch)", typeof(string));
DataColumn actualID = new DataColumn("Actual ID (mm)", typeof(string));
DataColumn roughness = new DataColumn("Roughness (mm)", typeof(string));
dt.Columns.Add(inletno);
dt.Columns.Add(pipeSize);
dt.Columns.Add(actualID);
dt.Columns.Add(roughness);
foreach (Inlet inlet in inlets)
{
if (inlet.IsActive)
dt.Rows.Add("Inlet Pipe " + inlet.TypeNo, inlet.InletPiping.Size.Value, inlet.InletPiping.ActualInsideDiameter.Value, inlet.InletPiping.Roughness.Value);
}
dtgSettings.Items.Refresh();
dtgSettings.ItemsSource = dt.DefaultView;
}
private void cmbResults_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ReloadResultsDataGrid();
}
private void chkMistUserDefined_Click(object sender, RoutedEventArgs e)
{
ReloadResultsDataGrid();
}
private void chkMaxUserDefined_Click(object sender, RoutedEventArgs e)
{
ReloadResultsDataGrid();
}
private void ReloadResultsDataGrid()
{
ComboBoxItem cmb = (ComboBoxItem)cmbResults.SelectedItem;
if (cmb != null)
{
Inlet inlet = (Inlet)cmb.Tag;
LoadInletPipingResults(inlet);
}
}
private void TabItem_GotFocus(object sender, RoutedEventArgs e)
{
}
private void dtgSettings_CurrentCellChanged(object sender, EventArgs e)
{
string myPoint = dtgSettings.SelectedIndex.ToString() + dtgSettings.SelectedValue.ToString();
}
private void dtgSettings_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
if (e.EditAction == DataGridEditAction.Commit)
{
var column = e.Column as DataGridBoundColumn;
if (column != null)
{
mySepProject = (Project)App.Current.Properties["myp_projects"];
Vessel vessel = mySepBLL.GetVessel(vesselID, mySepProject.Vessels);
var bindingPath = (column.Binding as Binding).Path.Path;
if (bindingPath == "Actual ID (mm)")
{
int idx = e.Row.GetIndex();
var el = e.EditingElement as TextBox;
vessel.Inlets[idx].InletPiping.ActualInsideDiameter.Value = Convert.ToDouble(el.Text);
vessel.Inlets[idx].InletPiping.ActualInsideDiameter.IsOverridden = true;
}
else if (bindingPath == "Pipe size (inch)")
{
int idx = e.Row.GetIndex();
var el = e.EditingElement as TextBox;
vessel.Inlets[idx].InletPiping.Size.Value = Convert.ToDouble(el.Text);
vessel.Inlets[idx].InletPiping.Size.IsOverridden = true;
if (!vessel.Inlets[idx].InletPiping.ActualInsideDiameter.IsOverridden)
{
vessel.Inlets[idx].InletPiping.ActualInsideDiameter.Value = vessel.Inlets[idx].InletPiping.Size.Value * 25.4;
DataRowView rowView = e.Row.Item as DataRowView;
rowView["Actual ID (mm)"] = vessel.Inlets[idx].InletPiping.ActualInsideDiameter.Value;
}
}
else if (bindingPath == "Roughness (mm)")
{
int idx = e.Row.GetIndex();
var el = e.EditingElement as TextBox;
vessel.Inlets[idx].InletPiping.Roughness.Value = Convert.ToDouble(el.Text);
}
App.Current.Properties["myp_projects"] = mySepProject;
ReloadResultsDataGrid();
}
}
}