Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用AutoGeneratingColumn向dataGrid插入背景色_C#_Wpf_Xaml - Fatal编程技术网

C# 使用AutoGeneratingColumn向dataGrid插入背景色

C# 使用AutoGeneratingColumn向dataGrid插入背景色,c#,wpf,xaml,C#,Wpf,Xaml,我不擅长使用WPF,实际上这是我第一次使用它。这就是为什么我需要你的帮助 我有一个具有AutoGeneratingColumn的DataGrid,我想在DataGrid上创建一些样式。但很难给它添加一些风格。我有一个复选框,当选中时,它将生成一个包含静态数据的行 这是我的XAML代码 这是我的.cs代码 public部分类入口管道:UserControl { 私有字符串容器; mySepProject项目; MySepBLL MySepBLL=新的MySepBLL(); 私有对象单元; pu

我不擅长使用WPF,实际上这是我第一次使用它。这就是为什么我需要你的帮助

我有一个具有AutoGeneratingColumn的DataGrid,我想在DataGrid上创建一些样式。但很难给它添加一些风格。我有一个复选框,当选中时,它将生成一个包含静态数据的行

这是我的XAML代码


这是我的.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();
                }
            }
        }