【问题标题】:How can I add specific values of textboxes in the Data grid (WPF)如何在数据网格 (WPF) 中添加文本框的特定值
【发布时间】:2015-12-24 09:37:00
【问题描述】:

我有 5 个文本框和一个按钮,我想要的是在单击按钮时在数据网格中显示 5 个文本框值中的 4 个。我是新用户,所以无法附上界面图片。

我的文本框命名如下:

IDTextbox, titleText, QuantityTextbox, PriceTextbox, BrandTextbox

我的按钮名为AddButton

当我点击AddButton时,来自titleText、QuantityTextbox、PriceTextbox、BrandTextbox的值应该显示在dataGrid中。

我不想在数据网格中显示产品 ID,而是想要一个标题为“Total_price”的列。此列应显示 total_price 即 (quantity * price)

另外,我想在每次点击 AddButton 时添加值。

谢谢

【问题讨论】:

    标签: c# wpf data-binding wpfdatagrid


    【解决方案1】:

    使用此代码

    <Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <DataGrid Name="DataGrid" ItemsSource="{Binding YourDataCollection}" />
    <Grid Grid.Column="1">
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition />
            <RowDefinition />
        </Grid.RowDefinitions>
        <TextBlock Grid.Row="0" Text="{Binding SelectedItem.Id, 
            ElementName=DataGrid}" />
        <TextBlock Grid.Row="1" Text="{Binding SelectedItem.Name, 
            ElementName=DataGrid}" />
        <TextBlock Grid.Row="2" Text="{Binding SelectedItem.BirthDate, 
            ElementName=DataGrid}" />
    </Grid>
    

    【讨论】:

      【解决方案2】:

      做一些类似的事情.....

      <TextBox Name="IDTextbox" AcceptsReturn="True" TextWrapping="Wrap" SpellCheck.IsEnabled="True" Language="en-US" />
      <TextBox Name="titleText" AcceptsReturn="True" TextWrapping="Wrap" SpellCheck.IsEnabled="True" Language="en-US" />
      <TextBox Name="QuantityTextbox" AcceptsReturn="True" TextWrapping="Wrap" SpellCheck.IsEnabled="True" Language="en-US" />
      <TextBox Name="PriceTextbox" AcceptsReturn="True" TextWrapping="Wrap" SpellCheck.IsEnabled="True" Language="en-US" />
      <TextBox Name="BrandTextbox" AcceptsReturn="True" TextWrapping="Wrap" SpellCheck.IsEnabled="True" Language="en-US" />
      <Button Content="Add new row" HorizontalAlignment="Left" Margin="0,10,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
      
      <DataGrid AutoGenerateColumns="False" Name="DataGrid1" CanUserAddRows="True" ItemsSource="{Binding TestBinding}" Margin="0,50,0,0" >
                  <DataGrid.Columns>
                      <DataGridTextColumn Header="Brand" IsReadOnly="True" Binding="{Binding Path=Brand}" Width="50"></DataGridTextColumn>
                      <DataGridTextColumn Header="Title" IsReadOnly="True"  Binding="{Binding Path=Title}" Width="130"></DataGridTextColumn>
                      <DataGridTextColumn Header="Quantity" IsReadOnly="True"  Binding="{Binding Path=Quantity}" Width="130"></DataGridTextColumn>
                      <DataGridTextColumn Header="Price" IsReadOnly="True" Binding="{Binding Path=Price}" Width="130"></DataGridTextColumn>
                  </DataGrid.Columns>
              </DataGrid>
      public partial class MainWindow : Window
      {
          public MainWindow()
          {
              InitializeComponent();
          }
      
          private void Button_Click(object sender, RoutedEventArgs e)
          {
              var data = new Test { Brand= BrandTextbox.Text, Title= titleText.Text,
                      Quantity = QuantityTextbox.Text, Price = PriceTextbox.Text };
      
              DataGridTest.Items.Add(data);
          }
      }
      
      public class Test
      {
          public string Brand { get; set; }
          public string Title { get; set; }
          public string Price { get; set; }
          public string Quantity { get; set; }
      }
      

      【讨论】:

      • 如果我想将 dataGrid 价格列中的所有价格加起来并在标签中显示在下方怎么办? @jitendra
      • 您可以在数据对象中再添加一行总计..​​.所以这样做--- data.add(new Test { Brand = "", Quality = "", Title = "Total " , 价格 = Data.Sub(l => l.Price)});行前 DataGridTest.Items.Add(data); @MohammadHaseeb 。目前我没有Visual Studio,所以如果你发现任何问题,请告诉我............
      • 感谢您的帮助。这段代码有一些错误“Data.Sub(l => l.Price)”
      • 你说得对,我只想在数据网格的底部显示总计
      • 抱歉使用“Data.Sum(l => l.Price)”而不是“Data.Sub(l => l.Price)”......谢谢......我有还为它找到了一个有用的线程............stackoverflow.com/questions/34484438/…
      【解决方案3】:

      在 Xaml 中

      <StackPanel>
          <TextBox x:Name="txtID" Height="50"></TextBox>
          <TextBox x:Name="txtQuantity" Height="50"></TextBox>
          <TextBox x:Name="txtPrice" Height="50"></TextBox>
          <TextBox x:Name="txtBrand" Height="50"></TextBox>
          <TextBox x:Name="txtTitle" Height="50"></TextBox>
          <Button Click="Button_Click_1" Height="20">Click</Button>
          <DataGrid x:Name="gridTotal">
      
          </DataGrid>
      </StackPanel>
      

      在windows Loaded事件中

      DataTable dt = new DataTable();
      private void Window_Loaded(object sender, RoutedEventArgs e)
              {
                  try
                  {
      
                      if (!dt.Columns.Contains("Title"))
                      {
                          dt.Columns.Add("Title");
                      }
                      if (!dt.Columns.Contains("Quantity"))
                      {
                          dt.Columns.Add("Quantity");
                      }
                      if (!dt.Columns.Contains("Price"))
                      {
                          dt.Columns.Add("Price");
                      }
                      if (!dt.Columns.Contains("Brand"))
                      {
                          dt.Columns.Add("Brand");
                      }
                      if (!dt.Columns.Contains("Total"))
                      {
                          dt.Columns.Add("Total");
                      }
      
                      gridTotal.ItemsSource = dt.DefaultView;
      
                  }
                  catch (Exception ec)
                  {
                      throw ec;
                  }
              }
      

      在按钮点击

       private void Button_Click_1(object sender, RoutedEventArgs e)
              {
                  DataRow dr = dt.NewRow();
                  dr["Title"] = txtTitle.Text;
                  dr["Quantity"] = txtQuantity.Text;
                  dr["Price"] = txtPrice.Text;
                  dr["Brand"] = txtBrand.Text;
                  dr["Total"] = Convert.ToDouble(txtQuantity.Text) * Convert.ToDouble(txtPrice.Text);
      
                  dt.Rows.Add(dr);
              }
      

      【讨论】:

      • 我想把 dataGrid 价格列中的所有价格加起来并显示在网格底部,请问您能帮帮我吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-19
      • 2014-01-29
      • 2013-04-07
      • 1970-01-01
      • 2012-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多