Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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# WPF Datagrid列总和_C#_Wpf_Wpfdatagrid - Fatal编程技术网

C# WPF Datagrid列总和

C# WPF Datagrid列总和,c#,wpf,wpfdatagrid,C#,Wpf,Wpfdatagrid,我有一个数据网格,我想把所有的值加起来。我认为,要做到这一点,我需要对该列中的值逐行求和。但我无法访问行,因为c#中的Datagrid.rows代码在WPF中不起作用。我通过以下方式访问项目总数: datagrid.Items.Count; 如何在WPF中计算datagrid列的总和 Datagrid xaml代码: <DataGrid BorderThickness="0" Name="grid_lab" RowHeight="25" IsReadOnly="True" CanUse

我有一个数据网格,我想把所有的值加起来。我认为,要做到这一点,我需要对该列中的值逐行求和。但我无法访问行,因为c#中的Datagrid.rows代码在WPF中不起作用。我通过以下方式访问项目总数:

datagrid.Items.Count;
如何在WPF中计算datagrid列的总和

Datagrid xaml代码:

<DataGrid BorderThickness="0" Name="grid_lab" RowHeight="25" IsReadOnly="True"  CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeColumns="True" CanUserResizeRows="False" AutoGenerateColumns="False" ColumnWidth="*" HorizontalGridLinesBrush="#FFDCDBDB" VerticalGridLinesBrush="#FFDCDBDB" HeadersVisibility="Column" VerticalAlignment="Top" Background="{x:Null}" MouseLeftButtonUp="grid_lab_MouseLeftButtonUp">

Datagrid文本列代码:

<DataGridTextColumn Binding="{Binding Path=tutar}" Header="Tutar" MaxWidth="50">
                            <DataGridTextColumn.ElementStyle>
                                <Style TargetType="TextBlock">
                                    <Setter Property="VerticalAlignment" Value="Center"/>
                                    <Setter Property="Padding" Value="5,0,0,0"/>
                                </Style>
                            </DataGridTextColumn.ElementStyle>
                        </DataGridTextColumn>

已加载usercontrol中的代码总和:

            decimal sum = 0m;
        for (int i = 0; i < grid_lab.Items.Count - 1; i++)
        {
            sum += (decimal.Parse((grid_lab.Columns[7].GetCellContent(grid_lab.Items[i]) as TextBlock).Text));
        }
十进制和=0m;
对于(int i=0;i
要获取要求和的列,请将
.Columns
集合属性与列的索引一起使用。然后可以使用列上的
GetCellContent()
方法访问其单元格。请记住,单元格的内容是
TextBlock
类型的对象,因此请强制转换它,获取其
Text
属性,并将值解析为
decimal
(或适合您的值的任何其他类型)

在您的情况下,如果需要第八列(索引=7),可以尝试以下方法:

decimal sum = 0m;
for (int i = 0; i < grid_lab.Items.Count - 1; i++) {
    sum += (decimal.Parse((grid_lab.Columns[7].GetCellContent(grid_lab.Items[i])as TextBlock).Text));
}
但是,由于您是在从数据库获取
数据表并绑定网格的同一个函数中计算总和,为什么不直接从
数据表计算总和呢?您可以这样做(这与上面的代码非常相似,但直接从
DataTable
而不是网格):


注意:为什么要给
DataTable
命名
dbdataset
?你应该考虑正确地命名变量。

这里,我使用绑定来做同样的事情。请参考我的示例代码,它可能会对您有所帮助。它求和价格*数量,并将总数放入总计列

Products.xaml
我刚刚在这里添加了更新查询,它将价格和数量相乘,并计算总数。

@为什么不使用模型并将总数绑定到一列,而不是从网格计算。我得到一个错误。WPFAApplication1.exe中发生类型为“System.NullReferenceException”的未处理异常。其他信息:对象引用未设置为对象的实例。Oops!我忘了循环中的
-1
。请参阅我的最新答案。如果将绑定对象强制转换为绑定到的类型,我还添加了一个更好的解决方案。我创建了一个工作测试项目,并从中复制了代码。这两种解决方案都应该有效。你试过第二个吗?您需要发布网格的代码以及填充网格的代码,以便我们可以查看并帮助您调试问题。这还不够。我需要整个网格XAML和填充它的代码,或者至少是绑定到的对象。我测试了你的代码,它成功了。无论如何,我更新了我的答案以反映您的代码,所以请查看。
decimal sum = 0m;
foreach (DataRowView row in grid_lab.ItemsSource) {
    sum += (decimal)row["tutar"];
}
decimal sum = 0;
foreach (DataRow row in dbdataset.Rows) {
    sum += Convert.ToDecimal(row["tutar"]);
}
  <DataGrid AutoGenerateColumns="False" Height="150" HorizontalAlignment="Left" Margin="108,169,0,0" x:Name="dataGrid1" VerticalAlignment="Top" Width="365" ItemsSource="{Binding}" DataGridCell.Selected="dataGrid1_Selected">
          <DataGrid.Columns>   
           <DataGridTextColumn Header="Product Price" Binding="{Binding productprice}"/>
           <DataGridTextColumn Header="Product QTY" Binding="{Binding productqty}" />
           <DataGridTextColumn Header="Total" Binding="{Binding total}" x:Name="total" />
          </DataGrid.Columns> 
    </DataGrid>
private void addButton_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                NpgsqlConnection con = new NpgsqlConnection("Server=00.0.0.00;Port=1111;Database=TEST_DB;User Id=postgres;Password=****;");
                con.Open();
                NpgsqlCommand cmd = new NpgsqlCommand("insert into Product(productprice,productqty)values('"+ prodprice.Text.ToString() + "','" + prodqty.Text.ToString() + "')", con);
                NpgsqlCommand cmd2 = new NpgsqlCommand("update Product set total=productprice*productqty", con);
                cmd.CommandType = CommandType.Text;
                cmd.ExecuteNonQuery();
                cmd2.ExecuteNonQuery();
                con.Close();
                errorMessage.Text = "Item Added Successfully";
                prodprice.Text = prodqty.Text = "";
                NpgsqlCommand cmd1 = new NpgsqlCommand("select *from Product", con);
                NpgsqlDataAdapter adapter = new NpgsqlDataAdapter(cmd1);
                DataTable dt = new DataTable("Product");
                adapter.Fill(dt);
                dataGrid1.ItemsSource = dt.DefaultView;
            }
            catch (NpgsqlException)
            {
                errorMessage.Text ="Enter Valid Data" ;
            }
        }