【问题标题】:WPF Datagrid select a value from a cell in a certain rowWPF Datagrid 从某一行的单元格中选择一个值
【发布时间】:2016-05-28 00:50:12
【问题描述】:

我有一个DataGrid,有 3 列(id、User、MachineID)我希望从此网格中获取机器 ID。最好我想使用一个复选框来选择多行,但我只需要一次排序一行。

<DataGrid Grid.Column="0" Grid.Row="0"
          DockPanel.Dock="Bottom" AutoGenerateColumns="False" 
          ItemsSource="{Binding Path=UserList}" SelectionMode="Single"
          SelectedItem="{Binding SelectedCpuID, Mode=TwoWay}">
            <DataGrid.Columns>
            <DataGridTextColumn Header="ID" Binding="{Binding UserID}"></DataGridTextColumn>
            <DataGridTextColumn Width="200" Header="User" Binding="{Binding UserName}"></DataGridTextColumn>
            <DataGridTextColumn Width="210" Header="Machine ID" Binding="{Binding MachineID}"></DataGridTextColumn>

它绑定到视图模型,但我得到的是对象名称而不是行的内容(application.Users)。我试过SelectedItem="{Binding SelectedCpuID.MachineID, Mode=TwoWay}"&gt; 也没有用。我对 WPF 和数据绑定很陌生,所以我一直在尝试处理我们在这里生成的另一个程序,它做类似的事情但使用组合框,它似乎与数据网格不一样。

任何知道如何让它工作的人请告诉我。 谢谢, 山姆

【问题讨论】:

    标签: wpf vb.net datagrid


    【解决方案1】:

    您可能只是缺少用于显示的数据网格的列。 DataGrid 的 ItemsSource,例如 DataTable 或要呈现给用户的所有项目的集合(List 或其他 IEnumerable)。从那里,您需要定义要显示的每一列并给出这些特征(宽度、字体、颜色等)。每列的绑定是一个路径,因为它可以在 UserList 的每个条目上找到。

    那么,

    <DataGrid
        ItemsSource="{Binding UserList}"
        AutoGenerateColumns=False >
    
        <DataGrid.Columns>
            <DataGridTextColumn Header="Id" Binding="{Binding Path=Id}" />
            <DataGridTextColumn Header="User" Binding="{Binding Path=User}" />
            <DataGridTextColumn Header="Machine" Binding="{Binding Path=MachineID}" />
        </DataGrid.Columns>
    </DataGrid>
    

    现在,您的 UserList 源。如果是比如List(),那么每个属性都应该可以通过getter/setter来获取,比如...

    public class SomeUserClass()
    {
       public string Id {get; set;}
       public string User {get; set;}
       public string MachineID {get; set; }
    }
    

    【讨论】:

    • 是的,我确实有类似的代码,我应该在帖子中包含它,抱歉。我想要做的是选择行时,我想获取机器ID,以便我可以将其用于查询。我将修改我的帖子以显示列的代码。
    • 没关系,我现在可以正常工作了。你让我走上了正确的道路我没有意识到我的 SelectedCpuID 属性设置为 String 而不是 list(of Users)
    • @SamLucas,最后一点。您的“SelectedItem”应该代表同一类的实例,因此当用户选择一条记录时,整个对象实例将位于您的“SelectedCpuID”属性中。从那里,您可以使用 SelectedCpuId.MachineID(或它的任何部分)进行查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 2014-11-01
    • 1970-01-01
    相关资源
    最近更新 更多