小编Mat*_*ton的帖子

我可以将匿名类型传递给我的ASP.NET MVC视图吗?

我刚刚开始使用ASP.NET MVC,因为它处于测试阶段.在我的代码中,我正在运行一个简单的LINQ to SQL查询来获取结果列表并将其传递给我的视图.这种事:

var ords = from o in db.Orders
           where o.OrderDate == DateTime.Today
           select o;

return View(ords);
Run Code Online (Sandbox Code Playgroud)

但是,在我的视图中,我意识到我需要访问每个订单的客户名称.我开始使用,o.Customer.Name但我很确定这是为每个订单执行单独的查询(因为LINQ的延迟加载).

减少查询数量的合理方法是同时选择客户名称.就像是:

var ords = from o in db.Orders
           from c in db.Customers
           where o.OrderDate == DateTime.Today
               and o.CustomerID == c.CustomerID
           select new { o.OrderID, /* ... */, c.CustomerName };

return View(ords);
Run Code Online (Sandbox Code Playgroud)

除了现在我的"ords"变量是一个匿名类型的IEnumerable.

是否可以以这样的方式声明ASP.NET MVC视图:它接受IEnumerable作为其视图数据,其中T由从控制器传递的内容定义,或者我是否必须定义从我的查询填充的具体类型?

asp.net-mvc

43
推荐指数
3
解决办法
4万
查看次数

为什么我不能在ComboBox中选择空值?

在WPF中,似乎无法从ComboBox中选择(使用鼠标)"null"值.编辑为了澄清,这是.NET 3.5 SP1.

这是一些显示我的意思的代码.首先,C#声明:

public class Foo
{
    public Bar Bar { get; set; }
}

public class Bar 
{
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

接下来,我的Window1 XAML:

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <StackPanel>
        <ComboBox x:Name="bars" 
                  DisplayMemberPath="Name" 
                  Height="21" 
                  SelectedItem="{Binding Bar}"
                  />
    </StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)

最后,我的Window1类:

public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();

        bars.ItemsSource = new ObservableCollection<Bar> 
        {
            null, 
            new Bar { Name = "Hello" }, 
            new Bar { Name = "World" …
Run Code Online (Sandbox Code Playgroud)

data-binding wpf combobox

42
推荐指数
5
解决办法
3万
查看次数

没有主键的表

我有几个表,其唯一的唯一数据是uniqueidentifier(Guid)列.因为guid是非顺序的(并且它们是客户端生成的所以我不能使用newsequentialid()),所以我在这个ID字段上创建了一个非主要的非聚集索引,而不是给表一个聚簇的主要键.

我想知道这种方法的性能影响.我见过一些人建议表应该有一个自动递增("identity")int作为聚簇主键,即使它没有任何意义,因为这意味着数据库引擎本身可以快速使用该值查找一行而不必使用书签.

我的数据库是在一堆服务器上进行合并复制的,所以我已经避开了identity int列,因为它们在复制方面有点毛茸茸.

你的想法是什么?表应该有主键吗?或者,如果没有合理的列来索引那么,是否可以没有任何聚簇索引?

sql-server indexing

41
推荐指数
3
解决办法
3万
查看次数

WPF中的GroupBox标头是否吞下鼠标单击?

看看这个非常简单的WPF程序示例:

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">

    <GroupBox>
        <GroupBox.Header>
            <CheckBox Content="Click Here"/>
        </GroupBox.Header>
    </GroupBox>
</Window>
Run Code Online (Sandbox Code Playgroud)

所以我有一个GroupBox,其标题是一个CheckBox.我们都做过类似的事情 - 通常你绑定GroupBox的内容,以便在取消选中CheckBox时禁用它.

但是,当我运行此应用程序并单击CheckBox时,我发现有时我的鼠标点击被吞下并且CheckBox的状态不会改变.如果我是对的,那就是当我点击GroupBox顶部边框所在的确切像素行时.

有人可以复制这个吗?为什么会发生这种情况,是否有办法绕过它?

编辑:将GroupBox的BorderThickness设置为0可以解决问题,但显然它会删除边框,因此它看起来不再像GroupBox一样.

.net wpf checkbox groupbox

41
推荐指数
3
解决办法
8529
查看次数

设计器视图中的Windows窗体控件中的错误

有时,我在Visual Studio 2008中的某些用户控件的设计模式中出现以下错误:

文件'UserControl.vb'不支持代码解析或生成,因为它不包含在支持代码的项目中.

它不会在一致的基础上发生,但它发生得足以令人讨厌.这个错误是否有任何常见原因?

是的,它是在一个支持代码的项目中 - 最后我检查过,WinForms项目通常都有代码!

.net visual-studio winforms

32
推荐指数
2
解决办法
7890
查看次数

ItemContainerGenerator.ContainerFromItem如何使用分组列表?

我有一个ListBox,直到最近才显示一个项目的平面列表.我能够使用myList.ItemContainerGenerator.ConainerFromItem(thing)来检索列表中托管"thing"的ListBoxItem.

本周我稍微修改了ListBox,因为它为其项目绑定的CollectionViewSource已启用分组.现在ListBox中的项目被分组在好的标题下面.

但是,由于执行此操作,ItemContainerGenerator.ContainerFromItem已停止工作 - 即使对于我知道在ListBox中的项目,它也会返回null.Heck - 即使ListBox填充了很多项,ContainerFromIndex(0)也返回null!

如何从显示分组项的ListBox中检索ListBoxItem?

编辑:这是修剪示例的XAML和代码隐藏.这会引发NullReferenceException,因为即使列表中有四个项目,ContainerFromIndex(1)也会返回null.

XAML:

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
    Title="Window1">

    <Window.Resources>
        <XmlDataProvider x:Key="myTasks" XPath="Tasks/Task">
            <x:XData>
                <Tasks xmlns="">
                    <Task Name="Groceries" Type="Home"/>
                    <Task Name="Cleaning" Type="Home"/>
                    <Task Name="Coding" Type="Work"/>
                    <Task Name="Meetings" Type="Work"/>
                </Tasks>
            </x:XData>
        </XmlDataProvider>

        <CollectionViewSource x:Key="mySortedTasks" Source="{StaticResource myTasks}">
            <CollectionViewSource.SortDescriptions>
                <scm:SortDescription PropertyName="@Type" />
                <scm:SortDescription PropertyName="@Name" />
            </CollectionViewSource.SortDescriptions>

            <CollectionViewSource.GroupDescriptions>
                <PropertyGroupDescription PropertyName="@Type" />
            </CollectionViewSource.GroupDescriptions>
        </CollectionViewSource>
    </Window.Resources>

    <ListBox 
        x:Name="listBox1" 
        ItemsSource="{Binding Source={StaticResource mySortedTasks}}" 
        DisplayMemberPath="@Name"
        >
        <ListBox.GroupStyle>
            <GroupStyle>
                <GroupStyle.HeaderTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Name}"/>
                    </DataTemplate>
                </GroupStyle.HeaderTemplate>
            </GroupStyle>
        </ListBox.GroupStyle>
    </ListBox>
</Window>
Run Code Online (Sandbox Code Playgroud)

CS:

public Window1() …
Run Code Online (Sandbox Code Playgroud)

.net wpf listbox

29
推荐指数
1
解决办法
3万
查看次数

枚举像alt-tab这样的窗口

我正在创建一个alt-tab替代Vista,但我列出了所有活动程序的一些问题.

我正在使用EnumWindows获取Windows列表,但这个列表很大.当我只打开10个窗户时,它包含大约400个项目.对于每一个控件和许多其他东西来说,它似乎都是一个蠢货.

因此,我必须以某种方式过滤此列表,但我无法像alt-tab那样完全执行此操作.

这是我现在用来过滤列表的代码.它工作得很好,但我得到了一些不需要的窗口,如Visual Studio中的独立工具窗口,我也想念iTunes和Warcraft3等窗口.

private bool ShouldWindowBeDisplayed(IntPtr window)
{
    uint windowStyles = Win32.GetWindowLong(window, GWL.GWL_STYLE);

    if (((uint)WindowStyles.WS_VISIBLE & windowStyles) != (uint)WindowStyles.WS_VISIBLE ||
        ((uint)WindowExStyles.WS_EX_APPWINDOW & windowStyles) != (uint)WindowExStyles.WS_EX_APPWINDOW)
    {
        return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

c# windows winapi

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

如何使用Powershell更改文件的属性?

我有一个Powershell脚本,可以将文件从一个位置复制到另一个位置.复制完成后,我想清除源位置中已复制文件的存档属性.

如何使用Powershell清除文件的Archive属性?

powershell

22
推荐指数
3
解决办法
4万
查看次数

可空类型如何在C#中工作?

'int?'之间的幕后差异是什么?和'int'?'int?' 某种程度上是一种参考类型?

c#

20
推荐指数
2
解决办法
2万
查看次数

为什么Func <T>与Func <IEnumerable <T >>不明确?

这个让我感到沮丧,所以我想我会在这里问,希望C#guru可以向我解释.

为什么这段代码会产生错误?

class Program
{
    static void Main(string[] args)
    {
        Foo(X); // the error is on this line
    }

    static String X() { return "Test"; }

    static void Foo(Func<IEnumerable<String>> x) { }
    static void Foo(Func<String> x) { }
}
Run Code Online (Sandbox Code Playgroud)

有问题的错误:

Error
    1
    The call is ambiguous between the following methods or properties:
'ConsoleApplication1.Program.Foo(System.Func<System.Collections.Generic.IEnumerable<string>>)' and 'ConsoleApplication1.Program.Foo(System.Func<string>)'
    C:\Users\mabster\AppData\Local\Temporary Projects\ConsoleApplication1\Program.cs
    12
    13
    ConsoleApplication1
Run Code Online (Sandbox Code Playgroud)

我使用的是什么类型并不重要 - 如果在该代码中用"int"替换"String"声明,您将得到相同类型的错误.这就像编译器不能告诉之间的区别Func<T>Func<IEnumerable<T>>.

有人可以对此有所了解吗?

c# generics

20
推荐指数
2
解决办法
2859
查看次数