首页 > 解决方案 > Syncfusion数据网格如何获取用户单击的单元格的值

问题描述

使用 Xamarin 的 Syncfusion 数据网格形成如何获取单元格值的内容。我已经包含了 Syncfusion 提供的网格事件。

https://help.syncfusion.com/xamarin/datagrid/grid-events

<sfgrid:SfDataGrid x:Name="sfGrid" 
        AllowSorting="True"
        ColumnSizer="Star"
        AllowDraggingRow="True"
        SelectedIndex="2"
        AllowResizingColumn="True"
        SelectionMode="Single"
        AllowEditing="True"
        NavigationMode="Cell"
        AllowKeyboardNavigation="True"
        AutoGenerateColumns="False"
        ItemsSource="{Binding Students}">
    <sfgrid:SfDataGrid.Columns x:TypeArguments="syncfusion:Columns">

        <sfgrid:GridTextColumn HeaderText="First Name" 
         MappingName="FirstName" />
        <sfgrid:GridTextColumn HeaderText="Last Name" 
                    MappingName="LastName" />
        <sfgrid:GridTextColumn HeaderText="TB" 
                    MappingName="TB" />
        <sfgrid:GridTextColumn HeaderText="PU" 
                    MappingName="PU" />
    </sfgrid:SfDataGrid.Columns>
</sfgrid:SfDataGrid>

例如,用户点击 TB 的单元格,在第 2 行该值为 108.7,我想获得该值。

 public AcitivtyListPage()
 {
    InitializeComponent();

    this.BindingContext = new StudentsViewModel();        
    sfGrid.CurrentCellActivated += SfGrid_CurrentCellActivated;
    }

  } 

我尝试查看 CurrentCellActivated 但它似乎没有选定的单元格值对象。

 private void SfGrid_CurrentCellActivated(object sender, Syncfusion.SfDataGrid.XForms.CurrentCellActivatedEventArgs e)
 {
        var item = sfGrid.GetSelectedCells();
 }

我也尝试了这个示例,但它不适用于控件的更新版本,某些方法不再存在。

https://www.syncfusion.com/kb/7436/how-to-get-the-cell-value-of-specific-row-and-column

当红色框围绕网格单元格时,该图形应该解释它,我想要的值包含在该单元格中,请参见下图。

在此处输入图像描述

标签: c#xamarin.formssyncfusion

解决方案


您可以在 CurrentCellActivated 事件上使用 SfDataGrid 的 GetCellValue() 方法获取当前单元格值。请参考下面的代码片段。

代码片段:

<syncfusion:SfDataGrid x:Name="dataGrid" SelectionMode="Single" NavigationMode="Cell" CurrentCellActivated="dataGrid_CurrentCellActivated" AutoGenerateColumns="False" ItemsSource="{Binding mycollect}" ColumnSizer="Star"> 
  
                <syncfusion:SfDataGrid.Columns> 
                    
                        <syncfusion:GridTextColumn LoadUIView="True" MappingName="No_1"></syncfusion:GridTextColumn> 
                    <syncfusion:GridTextColumn LoadUIView="True" MappingName="No_1"></syncfusion:GridTextColumn> 
                    <syncfusion:GridTextColumn LoadUIView="True" MappingName="No_1"></syncfusion:GridTextColumn> 
                </syncfusion:SfDataGrid.Columns> 
  
            </syncfusion:SfDataGrid>

....
 private void dataGrid_CurrentCellActivated(object sender, CurrentCellActivatedEventArgs e) 
        { 
            
            var dataRow = dataGrid.GetRowGenerator().Items.FirstOrDefault(x => x.RowIndex == e.CurrentRowColumnIndex.RowIndex); 
           var CellValue = dataGrid.GetCellValue(dataRow.RowData, dataGrid.Columns[e.CurrentRowColumnIndex.ColumnIndex].MappingName); 
        } 

推荐阅读