You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Kendo Grid单选按钮互斥并获取选中项?

实现Kendo Grid单选按钮互斥并获取选中项

嘿,我来帮你搞定这个需求!要让Kendo Grid里的单选按钮实现互斥(同一时间只能选一个),还能轻松获取选中的那一项,咱们可以按下面的步骤来操作:

1. 给Grid配置单选按钮列

首先在Grid的列定义里加一个模板列,用来渲染单选按钮。关键是给所有单选按钮设置相同的name属性——这是利用HTML单选按钮的原生特性,同一name下的按钮天然互斥,省得自己写复杂的互斥逻辑。另外,把每行数据的唯一标识(比如ID)绑定到单选按钮的value上,后面拿数据会很方便:

columns: [
  {
    template: '<input type="radio" name="gridSelection" value="#= Id #" />',
    title: '选择',
    width: 80
  },
  // 你的其他列,比如:
  { field: 'ProductName', title: '产品名称' },
  { field: 'Price', title: '价格' }
]

2. 监听单选按钮点击,获取选中项

接下来我们可以借助Grid的dataBound事件,在数据加载完成后给单选按钮绑定点击事件(用事件委托更高效,不用给每个按钮单独绑),点击时就能拿到选中的行数据:

$("#yourGridId").kendoGrid({
  dataSource: yourDataSource, // 替换成你的数据源
  columns: [/* 上面的列定义 */],
  dataBound: function() {
    // 用事件委托监听单选按钮点击
    this.table.on("click", "input[name='gridSelection']", function() {
      var selectedId = $(this).val();
      // 通过ID从数据源里拿到完整的行数据
      var grid = $("#yourGridId").data("kendoGrid");
      var selectedItem = grid.dataSource.get(selectedId);
      
      // 这里就可以处理选中项了,比如打印或者传给后端
      console.log("当前选中的行数据:", selectedItem);
    });
  }
});

3. 可选优化:默认选中某一行

如果需要页面加载完成后自动选中某一行(比如第一行),可以在dataBound事件里加这段逻辑:

dataBound: function() {
  var grid = this;
  // 获取第一行数据
  var firstRow = grid.dataSource.view()[0];
  if (firstRow) {
    // 找到对应单选按钮并设为选中
    grid.table.find(`input[name='gridSelection'][value='${firstRow.Id}']`).prop("checked", true);
  }
  
  // 上面的点击监听逻辑...
}

为啥这么做?

  • 原生HTML单选按钮的name属性互斥特性,比自己写JS遍历取消选中要靠谱且高效。
  • 绑定行ID到value,直接用dataSource.get()就能拿到完整数据,不用去DOM里扒其他列的内容,代码更简洁维护性也高。

这样就能完美实现你要的效果啦!

内容的提问来源于stack exchange,提问作者Francis Lim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:11:33