【问题标题】:How to get DataGrid colum value when a button is clicked from inside DataGrid?从 DataGrid 内部单击按钮时如何获取 DataGrid 列值?
【发布时间】:2014-01-07 15:15:11
【问题描述】:

我有一个 silverlight 如下所示的 DataGrid

<sdk:DataGrid Name="DataGridDream" AutoGenerateColumns="False" HeadersVisibility="None" Background="Yellow" HorizontalAlignment="Center" Height="100" VerticalAlignment="Center" Width="120"  >

        <sdk:DataGrid.Columns >
                <sdk:DataGridTextColumn Binding="{Binding By}"   >

                </sdk:DataGridTextColumn>
                <sdk:DataGridTextColumn Binding="{Binding UserName}" >

                </sdk:DataGridTextColumn>
                <sdk:DataGridTemplateColumn>
                    <sdk:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Button Name="ButtonSave" Content="Take" Click="ButtonSave_Click">

                            </Button>
                        </DataTemplate>
                    </sdk:DataGridTemplateColumn.CellTemplate>
                </sdk:DataGridTemplateColumn>
            </sdk:DataGrid.Columns>
        </sdk:DataGrid>

我在 DataGrid 中有一个按钮的 Click 事件,

private void ButtonSave_Click(object sender, RoutedEventArgs e)
{
    int Value = // Value of the UserId column when a button is clicked on that row
}

怎么做?

【问题讨论】:

  • 我认为您可以尝试将当前 SelectedItem 与后面代码中的对象绑定。单击按钮后,该行应该处于选中状态,您可以通过检查您执行 SelectedItem 绑定的属性来简单地访问用户的 ID。
  • @Eisenhorn 你能告诉我怎么做吗
  • ((Button)sender).DataContext 应该是当前数据网格行绑定的项。

标签: c# wpf silverlight datagrid


【解决方案1】:

这将为您获得点击行的UserName 属性值:

private void ButtonSave_Click(object sender, RoutedEventArgs e)
{
   string userName = (((Button)sender).DataContext as ModelClass).UserName;
}

ModelClass 是您的属性所在的位置,即绑定的底层源类。

【讨论】:

  • 找不到它所说的类型或命名空间名称“模型类”
  • 是的,就像我提到的那样,将 ModelClass 替换为存在 UserName 属性的实际类。
  • 有任何关于silverlight DataGrid 及其事件和一切的文章或书籍吗?
  • 链接 herehere 将帮助您入门。
【解决方案2】:

您可以从 DataGrid 中获取所选项目,尝试如下操作:

private void ButtonSave_Click(object sender, RoutedEventArgs e)
{        
    var row = (int)DataGridDream.SelectedItem;
}

【讨论】:

  • 它将哪些值加载到行变量中,我的意思是我绑定了两个值,'By' 和 'UserName',如何取其中一个值?
  • 这取决于列中的类型。您可以根据类型适当地转换它。在 click 事件中设置断点,看看 DataGridDream.SelectedItem 类型。
【解决方案3】:

您可以将当前行值作为动态对象获取。您可以使用该对象访问网格行中的所有值。

Mike Schwartz 的 solution 的修改版将是

    private void ButtonSave_Click(object sender, RoutedEventArgs e)
    {
        dynamic row = DataGridDream.SelectedItem;
    }

您还可以通过 Rohit Vats suggested 获取行值。但是通过使用 dynamic 关键字,您将不必声明模型类。

    private void ButtonSave_Click(object sender, RoutedEventArgs e)
    {
       dynamic row = ((Button)sender).DataContext;
    }

之后,您可以像这样访问用户名

    var UserName = row.UserName;

【讨论】:

    猜你喜欢
    • 2014-02-04
    • 1970-01-01
    • 2022-11-09
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    • 2011-08-15
    • 2019-04-09
    • 1970-01-01
    相关资源
    最近更新 更多