C#WPF DataGrid可编辑组合框通过单击编辑返回-1作为选定行

时间:2018-08-24 17:24:22

标签: c# wpf combobox datagrid

我正在尝试从DataGrid表中的可编辑组合框获取单元格值。当从选项中选择一个项目时,将成功/正确地提取值,但是当用户在组合框中输入文本时,则不能成功提取这些值(除非他们双击)

问题:RowIndex变为-1(在单击一次单击文本输入时),就好像未选择行一样,导致代码失败并错误地处理了更新。

我该如何解决?如果强迫用户双击是有效的选项,我该怎么做?

这是我的C#代码:

QuickFix.FIX43.MarketDataSnapshotFullRefresh

这是我的专栏的XAML代码:

private void ComboBox_LostFocus(object sender, RoutedEventArgs e)
        {
            if (e != null)
            {
                TextBox t = e.Source as TextBox;
                if (t != null)
                {
                    try
                    {
                        int RowIndex = MYGRID.Items.IndexOf(MYGRID.SelectedItem);
                        if (RowIndex < 0)
                        {
                            MessageBox.Show("Index < 0"); //For Testing
                        }
                        //Obtain new Value
                        string Value = t.Text.ToString();
                        //Obtain item ID
                        DataGridRow Row = (DataGridRow)MYGRID.ItemContainerGenerator.ContainerFromIndex(RowIndex);
                        DataGridCell RowColumn = MYGRID.Columns[0].GetCellContent(Row).Parent as DataGridCell;
                        int ID = Convert.ToInt32(((TextBlock)RowColumn.Content).Text);

                        //Unrelated code continues...

                        }
                        catch (Exception) { }
                    }
                }

            }

1 个答案:

答案 0 :(得分:1)

不确定自己在做什么,但是如果您只想阅读Text中的ComboBox,只需使用发件人即可!

private void ComboBox_LostFocus(Object sender, RoutedEventArgs e)
{
    var comboBox = sender as ComboBox;
    if (comboBox != null)
    {
        int id;
        if(int.TryParse(comboBox.Text, out id))
        {
            // do your thing!!!!
        }
    }
}

要获取索引,可以使用以下帮助方法:

public static DependencyObject GetParent<T>(DependencyObject child)
{
    if (child == null) return null;

    var parent = VisualTreeHelper.GetParent(child);
    return parent is T ? parent : GetParent<T>(parent);
}

用法

var index = ((DataGridRow)GetParent<DataGridRow>(comboBox))?.GetIndex();