简体   繁体   English

将文本框的值传递给 datagrid WPF C# 中特定列的第一个空行?

[英]Pass value of textbox to first empty row of specific column in datagrid WPF C#?

I am creating WPF application running c# .我正在创建运行 c# 的 WPF 应用程序。 On one tab item I have checkbox textbox and button on another tab I have datagrid.在一个选项卡项目上,我有复选框文本框和另一个选项卡上的按钮,我有数据网格。 ComboBox contains column header names. ComboBox 包含列标题名称。 Once button is clicked it should enter text from textbox to first empty cell of column defined by ComboBox.单击按钮后,它应将文本框中的文本输入到 ComboBox 定义的列的第一个空单元格。

My XAML :我的 XAML :

<TabItem x:Name="INCTab" Header="Incident Log" Height="22" VerticalAlignment="Bottom">
                    <Grid Background="#FFE5E5E5">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition/>
                            <ColumnDefinition Width="35*"/>
                        </Grid.ColumnDefinitions>
                        <Label x:Name="CReatedTicketNumberLabel" Content="Created Ticket No." Grid.Column="1" HorizontalAlignment="Left" Height="25" Margin="640,308,0,0" VerticalAlignment="Top" Width="110"/>
                        <TextBox x:Name="Userzalog" Grid.Column="1" HorizontalAlignment="Left" Height="23" Margin="755,310,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="245"/>
                        <ComboBox x:Name="TicketType" HorizontalAlignment="Left" VerticalAlignment="Top" Width="245" Grid.Column="1" Margin="755,341,0,0"/>
                        <Label x:Name="TicketTypeLabel" Content="Created Ticket No." Grid.Column="1" HorizontalAlignment="Left" Height="25" Margin="640,338,0,0" VerticalAlignment="Top" Width="110"/>
                        <Button x:Name="AddToDailySheet" Content="Add to List" Grid.Column="1" HorizontalAlignment="Left" Height="25" Margin="1075,313,0,0" VerticalAlignment="Top" Width="75" Click="AddToDailySheet_Click"/>
                    </Grid>
                </TabItem>
                 <TabItem x:Name="ExcelTab" Header="Excel File">
            <Grid Background="#FFE5E5E5">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="122*"/>
                    <ColumnDefinition Width="775*"/>
                    <ColumnDefinition Width="422*"/>
                </Grid.ColumnDefinitions>

                <DataGrid x:Name="ExcelTikets1" HorizontalAlignment="Center" Height="455" VerticalAlignment="Top" Width="1195"  SelectionUnit="Cell"  Margin="77,15,47,0" Grid.ColumnSpan="3" AutoGenerateColumns="False" ItemsSource="{Binding Persons}" >
                    <DataGrid.Columns>
                        <DataGridTextColumn Binding="{Binding Path=RR}" Header="RR" Width="100">
                            <DataGridTextColumn.HeaderStyle>
                                <Style TargetType="DataGridColumnHeader">
                                    <Setter Property="HorizontalContentAlignment" Value="Center" />
                                    <Setter Property="Background" Value="#FFC000"/>
                                </Style>
                            </DataGridTextColumn.HeaderStyle>
                            <DataGridTextColumn.CellStyle >
                                <Style TargetType="DataGridCell" >
                                    <Setter Property="Background" Value="#A9D08E" />
                                    <Setter Property="Foreground" Value="Black" />
                                    <Setter Property="FontWeight" Value="Bold"></Setter>
                                    <Setter Property="FontSize" Value="14"></Setter>
                                </Style>
                            </DataGridTextColumn.CellStyle>
                        </DataGridTextColumn>
                        <DataGridTextColumn Binding="{Binding Path=RD}" Header="RD" Width="100">
                            <DataGridTextColumn.HeaderStyle>
                                <Style TargetType="DataGridColumnHeader">
                                    <Setter Property="HorizontalContentAlignment" Value="Center" />
                                    <Setter Property="Background" Value="#FFC000"/>
                                </Style>
                            </DataGridTextColumn.HeaderStyle>
                            <DataGridTextColumn.CellStyle>
                                <Style TargetType="DataGridCell">
                                    <Setter Property="Background" Value="#92D050" />
                                    <Setter Property="Foreground" Value="Black" />
                                    <Setter Property="FontWeight" Value="Bold"></Setter>
                                    <Setter Property="FontSize" Value="14"></Setter>
                                </Style>
                            </DataGridTextColumn.CellStyle>
                        </DataGridTextColumn>
                        <DataGridTextColumn Binding="{Binding Path=DI}" Header="DI" Width="100">
                            <DataGridTextColumn.HeaderStyle>
                                <Style TargetType="DataGridColumnHeader">
                                    <Setter Property="HorizontalContentAlignment" Value="Center" />
                                    <Setter Property="Background" Value="#FFC000"/>
                                </Style>
                            </DataGridTextColumn.HeaderStyle>
                            <DataGridTextColumn.CellStyle>
                                <Style TargetType="DataGridCell">
                                    <Setter Property="Background" Value="#A9D08E" />
                                    <Setter Property="Foreground" Value="Black" />
                                    <Setter Property="FontWeight" Value="Bold"></Setter>
                                    <Setter Property="FontSize" Value="14"></Setter>
                                </Style>
                            </DataGridTextColumn.CellStyle>
                        </DataGridTextColumn>
                        <DataGridTextColumn Binding="{Binding Path=DU}" Header="DU" Width="100">
                            <DataGridTextColumn.HeaderStyle>
                                <Style TargetType="DataGridColumnHeader">
                                    <Setter Property="HorizontalContentAlignment" Value="Center" />
                                    <Setter Property="Background" Value="#FFC000"/>
                                </Style>
                            </DataGridTextColumn.HeaderStyle>
                            <DataGridTextColumn.CellStyle>
                                <Style TargetType="DataGridCell">
                                    <Setter Property="Background" Value="#92D050" />
                                    <Setter Property="Foreground" Value="Black" />
                                    <Setter Property="FontWeight" Value="Bold"></Setter>
                                    <Setter Property="FontSize" Value="14"></Setter>
                                </Style>
                            </DataGridTextColumn.CellStyle>
                        </DataGridTextColumn>
                        <DataGridTextColumn Binding="{Binding Path=RT}" Header="RT" Width="100">
                            <DataGridTextColumn.HeaderStyle>
                                <Style TargetType="DataGridColumnHeader">
                                    <Setter Property="HorizontalContentAlignment" Value="Center" />
                                    <Setter Property="Background" Value="#FFC000"/>
                                </Style>
                            </DataGridTextColumn.HeaderStyle>
                            <DataGridTextColumn.CellStyle>
                                <Style TargetType="DataGridCell">
                                    <Setter Property="Background" Value="#A9D08E" />
                                    <Setter Property="Foreground" Value="Black" />
                                    <Setter Property="FontWeight" Value="Bold"></Setter>
                                    <Setter Property="FontSize" Value="14"></Setter>
                                </Style>
                            </DataGridTextColumn.CellStyle>
                        </DataGridTextColumn>
                        <DataGridTextColumn Binding="{Binding Path=RW}" Header="RW" Width="100">
                            <DataGridTextColumn.HeaderStyle>
                                <Style TargetType="DataGridColumnHeader">
                                    <Setter Property="HorizontalContentAlignment" Value="Center" />
                                    <Setter Property="Background" Value="#FFC000"/>
                                </Style>
                            </DataGridTextColumn.HeaderStyle>
                            <DataGridTextColumn.CellStyle>
                                <Style TargetType="DataGridCell">
                                    <Setter Property="Background" Value="#92D050" />
                                    <Setter Property="Foreground" Value="Black" />
                                    <Setter Property="FontWeight" Value="Bold"></Setter>
                                    <Setter Property="FontSize" Value="14"></Setter>
                                </Style>
                            </DataGridTextColumn.CellStyle>
                        </DataGridTextColumn>
                        <DataGridTextColumn Binding="{Binding Path=Info_only_ticket}" Header="Info only tickets" Width="120">
                            <DataGridTextColumn.HeaderStyle>
                                <Style TargetType="DataGridColumnHeader">
                                    <Setter Property="HorizontalContentAlignment" Value="Center" />
                                    <Setter Property="Background" Value="#FFC000"/>
                                </Style>
                            </DataGridTextColumn.HeaderStyle>
                            <DataGridTextColumn.CellStyle>
                                <Style TargetType="DataGridCell">
                                    <Setter Property="Background" Value="#A9D08E" />
                                    <Setter Property="Foreground" Value="Black" />
                                    <Setter Property="FontWeight" Value="Bold"></Setter>
                                    <Setter Property="FontSize" Value="14"></Setter>
                                </Style>
                            </DataGridTextColumn.CellStyle>
                        </DataGridTextColumn>
                        <DataGridTextColumn Binding="{Binding Path=SPEC_Tickets}" Header="SPEC Tickets" Width="120">
                            <DataGridTextColumn.HeaderStyle>
                                <Style TargetType="DataGridColumnHeader">
                                    <Setter Property="HorizontalContentAlignment" Value="Center" />
                                    <Setter Property="Background" Value="#FFC000"/>
                                </Style>
                            </DataGridTextColumn.HeaderStyle>
                            <DataGridTextColumn.CellStyle>
                                <Style TargetType="DataGridCell">
                                    <Setter Property="Background" Value="#92D050" />
                                    <Setter Property="Foreground" Value="Black" />
                                    <Setter Property="FontWeight" Value="Bold"></Setter>
                                    <Setter Property="FontSize" Value="14"></Setter>
                                </Style>
                            </DataGridTextColumn.CellStyle>
                        </DataGridTextColumn>
                        <DataGridTextColumn Binding="{Binding Path=Escalations}" Header="Escalation" Width="100">
                            <DataGridTextColumn.HeaderStyle>
                                <Style TargetType="DataGridColumnHeader">
                                    <Setter Property="HorizontalContentAlignment" Value="Center" />
                                    <Setter Property="Background" Value="#FFC000"/>
                                </Style>
                            </DataGridTextColumn.HeaderStyle>
                            <DataGridTextColumn.CellStyle>
                                <Style TargetType="DataGridCell">
                                    <Setter Property="Background" Value="#A9D08E" />
                                    <Setter Property="Foreground" Value="Black" />
                                    <Setter Property="FontWeight" Value="Bold"></Setter>
                                    <Setter Property="FontSize" Value="14"></Setter>
                                </Style>
                            </DataGridTextColumn.CellStyle>
                        </DataGridTextColumn>
                        <DataGridTextColumn Binding="{Binding Path=Duplicates}" Header="Duplicates" Width="100">
                            <DataGridTextColumn.HeaderStyle>
                                <Style TargetType="DataGridColumnHeader">
                                    <Setter Property="HorizontalContentAlignment" Value="Center" />
                                    <Setter Property="Background" Value="#FFC000"/>
                                </Style>
                            </DataGridTextColumn.HeaderStyle>
                            <DataGridTextColumn.CellStyle>
                                <Style TargetType="DataGridCell">
                                    <Setter Property="Background" Value="#92D050" />
                                    <Setter Property="Foreground" Value="Black" />
                                    <Setter Property="FontWeight" Value="Bold"></Setter>
                                    <Setter Property="FontSize" Value="14"></Setter>
                                </Style>
                            </DataGridTextColumn.CellStyle>
                        </DataGridTextColumn>
                        <DataGridTextColumn Binding="{Binding Path=Inbound_Calls_Created}" Header="inbound Calls Created" Width="120">
                            <DataGridTextColumn.HeaderStyle>
                                <Style TargetType="DataGridColumnHeader">
                                    <Setter Property="HorizontalContentAlignment" Value="Center" />
                                    <Setter Property="Background" Value="#FFC000"/>
                                </Style>
                            </DataGridTextColumn.HeaderStyle>
                            <DataGridTextColumn.CellStyle>
                                <Style TargetType="DataGridCell">
                                    <Setter Property="Background" Value="#A9D08E" />
                                    <Setter Property="Foreground" Value="Black" />
                                    <Setter Property="FontWeight" Value="Bold"></Setter>
                                    <Setter Property="FontSize" Value="14"></Setter>
                                </Style>
                            </DataGridTextColumn.CellStyle>
                        </DataGridTextColumn>
                        <DataGridTextColumn Binding="{Binding Path=Modified_with_no_resolution}" Header="Modified with no resolution" Width="160">
                            <DataGridTextColumn.HeaderStyle>
                                <Style TargetType="DataGridColumnHeader">
                                    <Setter Property="HorizontalContentAlignment" Value="Center" />
                                    <Setter Property="Background" Value="#FFC000"/>
                                </Style>
                            </DataGridTextColumn.HeaderStyle>
                            <DataGridTextColumn.CellStyle>
                                <Style TargetType="DataGridCell">
                                    <Setter Property="Background" Value="#92D050" />
                                    <Setter Property="Foreground" Value="Black" />
                                    <Setter Property="FontWeight" Value="Bold"></Setter>
                                    <Setter Property="FontSize" Value="14"></Setter>
                                </Style>
                            </DataGridTextColumn.CellStyle>
                        </DataGridTextColumn>

                    </DataGrid.Columns>
                </DataGrid>


                <TextBox x:Name="Datum" Grid.Column="1" HorizontalAlignment="Left" Height="23" Margin="50,518,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
                <Button x:Name="Createfile" Content="Create File" Grid.Column="2" HorizontalAlignment="Left" Height="30" Margin="85,493,0,0" VerticalAlignment="Top" Width="130" Click="Createfile_Click"/>
            </Grid>
        </TabItem>
    </TabControl>

My Code:我的代码:

     private void LoadApp()
    {

        String name = sheet1.Text;
        string name2 = brojradnje1.Text;
        String constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
                        "SCOLogTable.xlsx" +
                        ";Extended Properties='Excel 12.0 XML;HDR=YES;';";


        OleDbConnection con = new OleDbConnection(constr);

        OleDbCommand oconn1 = new OleDbCommand("Select * From [" + name + "$]", con);
       
        con.Open();


        OleDbDataAdapter sda = new OleDbDataAdapter(oconn1);
    

        DataTable data = new DataTable();

        sda.Fill(data);


        dataGridView1.SetBinding(ItemsControl.ItemsSourceProperty, new System.Windows.Data.Binding { Source = data });
        
        con.Close();

    }
    
    private void AddToDailySheet_Click(object sender, RoutedEventArgs e)
    {
        Datum.Text = DateTime.Today.ToString("dd.MM.yyyy");
         Clipboard.SetText(Userzalog.Text);
        MainTab.SelectedItem = ExcelTab;
        if ((ExcelTikets1.Items.Count > 0) &&
            (ExcelTikets1.Columns.Count > 0))
        {
            //Select the first column of the first item.
            ExcelTikets1.CurrentCell = new DataGridCellInfo(ExcelTikets1.Items[0], ExcelTikets1.Columns[0]);
            ExcelTikets1.SelectedCells.Add(ExcelTikets1.CurrentCell);
            ExcelTikets1.BeginEdit();
         
        }

        Clipboard.GetText()

    }

Anyone has any suggestion on how to do this ?有人对如何做到这一点有任何建议吗?

The below example shows how to extract the first empty cell of a column.下面的示例显示了如何提取列的第一个空单元格。 This code is based on your implementation style.此代码基于您的实现风格。

I highly recommend to take your time to look into data binding.我强烈建议您花时间研究数据绑定。 You should not reference the controls directly.您不应直接引用控件。 Rather should you bind properties of the controls to custom properties (preferably dependency properties when inside a control) in order to access the data.相反,您应该将控件的属性绑定到自定义属性(最好是控件内部的依赖属性)以便访问数据。 Data binding overview (WPF .NET) and Dependency properties overview (WPF .NET) 数据绑定概述 (WPF .NET)依赖属性概述 (WPF .NET)

private void InsertValueIntoFirstEmptyCell(string columnName, string newCellValue)
{
  var tableView = this.ExcelTikets1.ItemsSource as DataView;
  foreach (DataRowView rowView in tableView)
  {
    var currentCellValue = rowView[columnName] as string;
    if (string.IsNullOrWhiteSpace(currentCellValue))
    {
      rowView[columnName] = newCellValue;
      return;
    }
  }
}

private void AddToDailySheet_Click(object sender, RoutedEventArgs e)
{
  var selectedColumnName = this.TicketType,SelectedItem as string;
  string newCellValue = this.Userzalog.Text;
  InsertValueIntoFirstEmptyCell(selectedColumnName, newCellValue);

  // Your code
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM