从DataGrid内部单击按钮时如何获取DataGrid列值?

时间:2014-01-07 15:15:12

标签: c# wpf silverlight datagrid

我有一个 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
}

怎么做?

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

您可以从DataGrid中获取所选项目,尝试以下内容:

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

答案 2 :(得分:0)

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

Mike Schwartz solution的修改版本将是

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

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

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

之后,您可以像这样访问UserName

    var UserName = row.UserName;