小编Vic*_*lin的帖子

为什么在将和与其他数相乘时精度会下降

我在SQL Server中遇到过以下错误(或功能).

当我使用SUM (*column*)where column有一个numeric(18, 8)类型并将它乘以任何其他数字(整数或十进制)时,结果精度将减少到numeric(18, 6).

这是演示的示例脚本.

CREATE TABLE #temp (Qnty numeric(18,8))

INSERT INTO #temp (Qnty) VALUES (0.00000001)
INSERT INTO #temp (Qnty) VALUES (0.00000002)
INSERT INTO #temp (Qnty) VALUES (0.00000003)

SELECT Qnty, 1*Qnty
FROM #temp

SELECT (-1)*SUM(Qnty), SUM(Qnty), -SUM(Qnty), SUM(Qnty) * CAST(2.234 as numeric(18,8))
FROM #temp

DROP TABLE #temp
Run Code Online (Sandbox Code Playgroud)

第二个SELECT查询的结果

0.000000    0.00000006  -0.00000006 0.000000
Run Code Online (Sandbox Code Playgroud)

如您所见,然后我乘以SUM,结果为0.000000

谁有人能解释这种奇怪的行为?

UPD.我在SQL Server Studio 2000,2005和2008 SQL Server上执行了此查询.

sql-server sql-server-2005 sql-server-2008

14
推荐指数
1
解决办法
9955
查看次数

当 IsSelected 和 TreeView 中使用的两种类型时更改 TreeViewItem 模板

在我的 TreeView 中,我使用两个不同的类进行绑定。例如,我有一个组,可以有 ChildGroup 并且可以有 Items。该类的示例代码:

using System.Collections.Generic;
using System.Collections.ObjectModel;

namespace WpfApplication1
{
public class Group
{
    public Group(string name)
    {
        Name = name;
        items = new ObservableCollection<Item>();
        groups = new ObservableCollection<Group>();
    }
    public string Name { get;
        set;
    }

    private ObservableCollection<Item> items;
    private ObservableCollection<Group> groups;

    public ObservableCollection<Item> Items
    {
        get { return items; }
    }


    public ObservableCollection<Group> Groups
    {
        get { return groups; }
    }

    public IEnumerable<object> AllItems
    {
        get
        {
            foreach (var group in groups)
            {
                yield return …
Run Code Online (Sandbox Code Playgroud)

wpf treeview datatemplate hierarchicaldatatemplate

4
推荐指数
1
解决办法
5861
查看次数

TreeView.IsSelected触发器无法正常工作

我试图在TreeView中更改SelectedItem模板.我按照描述在Style.Triggers中编写了简单的容器样式并更改了项目模板

[1]:如何使用某种颜色突出显示树视图所选项目?要么

[2]:WPF TreeView:如何设置带有圆角的选定项目,如在资源管理器中,但它不起作用.

然后我创建了一个新项目,并使用简单的样式和模板创建了TreeView

<TreeView>
        <TreeViewItem Header="Item1" />
        <TreeViewItem Header="Item2" />
        <TreeViewItem Header="Item3"/>

        <TreeView.Resources>
            <DataTemplate DataType="{x:Type TreeViewItem}" x:Key="selectedTemplate">
                <StackPanel Height="25">
                    <TextBlock Text="SelectedItem"/>
                </StackPanel>
            </DataTemplate>
        </TreeView.Resources>

        <TreeView.ItemContainerStyle>
            <Style TargetType="TreeViewItem">
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="FontWeight" Value="Bold"/>
                        <Setter Property="FontStyle" Value="Italic"/>
                        <Setter Property="Foreground" Value="Red"/>
                        <Setter Property="Background" Value="Green"/>
                        <Setter Property="ItemTemplate" Value="{StaticResource selectedTemplate}"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </TreeView.ItemContainerStyle>
    </TreeView>
Run Code Online (Sandbox Code Playgroud)

所以,然后我在树视图中选择了TreeViewItem,FontWeight,FontStyle和Foreground都被更改了,但是Background和ItemTemplate没有改变.

结果: 这里

你能解释这个奇怪的行为吗?

wpf treeview triggers itemtemplate

2
推荐指数
1
解决办法
5408
查看次数

动态转换为通用接口

我有一个外部函数,其语法如下:

public void Set<FieldType>(
    Field field,
FieldType value
) 
Run Code Online (Sandbox Code Playgroud)

字段类型可以是一些基本类型,如intdoublebool等,也可以是这些类型的通用列表,例如IList< int >

问题是我必须准确传递IList< T >接口。如果我传递任何实现IList< T >接口的类型,该函数将抛出InvalidOperationException Unsupported type: System.Collections.Generic.List`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089] ]

例如:

IList<int> list1 = new List<int>();
List<int> list2 = new List<int>();

Entity entity = new Entity();

//this works fine
entity.Set(field, list1);

//Here exception is throw
entity.Set(field, list2);

//works fine as well
entity.Set(field, list2 as IList<int>);
Run Code Online (Sandbox Code Playgroud)

我通过反射动态获取列表的问题

var property = entityType.GetProperty(field.FieldName);
dynamic propertyValue = …
Run Code Online (Sandbox Code Playgroud)

c# reflection

2
推荐指数
1
解决办法
640
查看次数