获取datatable选中行的数据、获取总行数

本文详细介绍了如何使用DataTable插件获取选中行的数据、获取总行数的方法,并提供了注意事项,包括使用延时函数解决属性读取不准确的问题。

一、获取选中行的数据

var table = $('#example').DataTable();
var data = table.rows(['.selected']).data()[0];这个方法即可获得当前选中行数据

参考:

https://blog.youkuaiyun.com/qq_21208843/article/details/80816191

https://blog.youkuaiyun.com/xxj01/article/details/75457466

 

另外可以利用columnDefs中的"render": function (data, type, row),row可以获取一行信息,可以读取row.id等

 

二、获取总行数:

var dataTable = $('#dataTable').DataTable();

var info = dataTable.page.info();

var dataRows = info.recordsTotal;//当前页的总行数

var dataRows2 = info.recordsDisplay;//所有数据的总量

 

三、注意事项

有时读js取dataTable的属性得到的是错误的,原因可能是dataTable还没有加载好

解决方法:使用延时函数settime(),例如:

//显示总记录数
    setTimeout(function () {
        var totalnumber=datatable.page.info().recordsDisplay;
        console.log(totalnumber);
    }, 200);

 

<think>我们正在讨论如何从WinForms的DataGridView中获取定行的数据。用户的问题是如何获取定行的特定数据,比如"SubscriptionId"。 根据之前的回答,我们已经提供了两种方法:通过SelectedRows集合和通过CurrentRow属性。现在,用户再次询问如何获取定行的数据,可能是想了解更详细的内容或不同的情况。 考虑到引用内容,虽然提供了一些关于DataGridView的行为和样式的信息,但用户的问题核心是获取数据。因此,我们将重点放在如何获取数据上。 以下步骤是获取行数据的关键: 1. 确保有选中的行:在访问SelectedRows或CurrentRow之前,检查是否有选中的行。 2. 通过列名或索引访问单元格的值。 3. 处理可能出现的空值。 此外,如果DataGridView绑定到了数据源,我们还可以直接获取绑定数据对象,这样更加方便。 根据引用[5],我们知道DataGridView可以设置不同的样式,但这与获取数据无关。 因此,我们将提供两种主要方法: 方法1:通过单元格值直接获取(适用于未绑定数据源或绑定数据源但只需部分值) 方法2:通过绑定数据获取行数据对象(推荐,因为这样可以直接操作对象) 另外,我们之前提到过多的情况,这里也会覆盖。 步骤: 方法1:直接获取单元格值(如前所述) 方法2:获取绑定数据源中的对象 假设DataGridView绑定了一个数据源(如List<T>、DataTable等),那么我们可以通过SelectedRows的DataBoundItem属性来获取绑定的数据对象。 示例: 假设有一个类: public class Subscription { public string SubscriptionId { get; set; } public string Name { get; set; } // 其他属性 } 绑定到DataGridView: dataGridView1.DataSource = listOfSubscriptions; 获取选中行对应的Subscription对象: if (dataGridView1.SelectedRows.Count > 0) { // 获取第一个选中行的绑定对象 Subscription selectedSubscription = dataGridView1.SelectedRows[0].DataBoundItem as Subscription; if (selectedSubscription != null) { string subscriptionId = selectedSubscription.SubscriptionId; } } 或者多: foreach (DataGridViewRow row in dataGridView1.SelectedRows) { Subscription sub = row.DataBoundItem as Subscription; if (sub != null) { // 处理每个选中的对象 } } 注意:如果DataGridView没有绑定数据源,那么DataBoundItem将为null。 另外,如果设置了VirtualMode,那么可能需要使用其他方法,但这种情况较少。 结: 根据用户的需求,我们可以提供两种方式: 1. 通过单元格直接获取值(适用于任何情况,但需要知道列名) 2. 通过DataBoundItem获取绑定对象(更面向对象,推荐使用) 因此,回答将包括这两种方法,并强调绑定数据源时的最佳实践。 同时,根据用户的问题,我们生成相关问题。</think>### 如何在 WinForms 中获取 DataGridView 选中行数据 在 WinForms 中获取 DataGridView 选中行数据主要有两种方式,根据您的数据绑定方式择合适的方法: #### 方法 1:直接访问单元格值(未绑定数据源时适用) ```csharp // 确保有选中行 if (dataGridView1.SelectedRows.Count > 0) { // 获取第一行选中行的数据 DataGridViewRow selectedRow = dataGridView1.SelectedRows[0]; // 通过列名获取特定单元格值 string subscriptionId = selectedRow.Cells["SubscriptionId"].Value?.ToString(); string userName = selectedRow.Cells["UserName"].Value?.ToString(); // 获取行数据 List<object> rowData = new List<object>(); foreach (DataGridViewCell cell in selectedRow.Cells) { rowData.Add(cell.Value); } } ``` #### 方法 2:通过绑定数据获取(推荐,面向对象) ```csharp // 假设绑定的是 List<Subscription> 数据源 if (dataGridView1.SelectedRows.Count > 0) { // 直接获取绑定数据对象 var selectedItem = dataGridView1.SelectedRows[0].DataBoundItem as Subscription; if (selectedItem != null) { string subscriptionId = selectedItem.SubscriptionId; string userName = selectedItem.UserName; // 访问其他属性... } } ``` #### 关键点说明: 1. **数据绑定优势**:使用方法 2 时,直接操作数据对象更安全高效,避免直接操作 UI 元素[^5] 2. **空值处理**:始终使用 `?.` 运算符和 `null` 检查 3. **多支持**: ```csharp foreach (DataGridViewRow row in dataGridView1.SelectedRows) { if (row.DataBoundItem is Subscription item) { // 处理每个选中项 } } ``` #### 常见问题解决: 1. **列名不匹配**:使用列索引代替列名 ```csharp int colIndex = dataGridView1.Columns["SubscriptionId"].Index; var value = selectedRow.Cells[colIndex].Value; ``` 2. **显示特殊字符**:设置 `WrapMode` 正确处理换行符[^3] ```csharp dataGridView1.DefaultCellStyle.WrapMode = DataGridViewTriState.True; ``` 3. **删除操作**:删除多行时从后向前遍历避免索引错乱[^4] > 最佳实践:建议使用数据绑定方式,在数据类中封装业务逻辑: > ```csharp > public class Subscription > { > public string SubscriptionId { get; set; } > public string UserName { get; set; } > // 其他属性... > } > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值