一、图解

下图为效果图,点击 【A表】种的某一行,【B表】会有与之相对于一行会被自动选中并且勾选上;

二、Html 代码

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script type="text/JavaScript">
function gridRole_SelectionChanged(s, e) {
s.GetSelectedFieldValues("TyID", GetSelectedFieldValuesCallback);
}
function GetSelectedFieldValuesCallback(values) {
selList.BeginUpdate();
try {
selList.ClearItems();
for (var i = 0; i < values.length; i++) {
selList.AddItem(values[i]);
}
} finally {
selList.EndUpdate();
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<table style="width: 100%;">
<tr>
<td>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>
<dx:ASPxGridView ID="grid" ClientInstanceName="grid" runat="server" Width="300px"
AutoGenerateColumns="false" KeyFieldName="YgID" ClientIDMode="AutoID" OnCustomColumnDisplayText="grid_CustomColumnDisplayText">
<Styles Row-Cursor="pointer">
<Row Cursor="pointer">
</Row>
<AlternatingRow Enabled="True">
</AlternatingRow>
</Styles>
<ClientSideEvents FocusedRowChanged="function(s, e){ gridRole.PerformCallback(s.GetFocusedRowIndex()); }" />
<Columns>
<dx:GridViewDataTextColumn Caption="序号" VisibleIndex="1" Width="5%">
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn Caption="账号" FieldName="YgID" ShowInCustomizationForm="True"
VisibleIndex="2">
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn Caption="姓名" FieldName="Name" VisibleIndex="3">
</dx:GridViewDataTextColumn>
</Columns>
<SettingsBehavior AllowFocusedRow="True" />
<SettingsPager AlwaysShowPager="True"></SettingsPager>
<Styles>
<AlternatingRow Enabled="True"></AlternatingRow>
<Row Cursor="pointer"></Row>
</Styles>
</dx:ASPxGridView>
</td>
<td>
<dx:ASPxGridView ID="gridRole" ClientInstanceName="gridRole" runat="server" Width="200px"
AutoGenerateColumns="False" KeyFieldName="TyID" ClientIDMode="AutoID" OnCustomCallback="gridRole_CustomCallback">
<SettingsPager AlwaysShowPager="True">
</SettingsPager>
<Styles>
<Row Cursor="pointer">
</Row>
<AlternatingRow Enabled="True">
</AlternatingRow>
</Styles>
<Columns>
<dx:GridViewCommandColumn ShowSelectCheckbox="True" VisibleIndex="0" Width="5%">
<ClearFilterButton Visible="True">
</ClearFilterButton>
<HeaderStyle HorizontalAlign="Center" />
<CellStyle HorizontalAlign="Center">
</CellStyle>
<HeaderTemplate>
<input type="checkbox" onclick="gridRole.SelectAllRowsOnPage(this.checked);" title="全选" />
</HeaderTemplate>
</dx:GridViewCommandColumn>
<dx:GridViewDataTextColumn Caption="类型" FieldName="TyID"
VisibleIndex="1">
</dx:GridViewDataTextColumn> <dx:GridViewDataTextColumn Caption="角色名称" FieldName="TyName"
VisibleIndex="2">
</dx:GridViewDataTextColumn>
</Columns>
<SettingsBehavior AllowFocusedRow="True" AllowMultiSelection="true" />
<Styles Row-Cursor="pointer">
<Row Cursor="pointer">
</Row>
<AlternatingRow Enabled="True">
</AlternatingRow>
</Styles>
<ClientSideEvents SelectionChanged="gridRole_SelectionChanged" />
</dx:ASPxGridView>
</td>
</tr>
<tr>
<td colspan="2">
<dx:ASPxListBox ID="lsbRoleId" ClientInstanceName="selList" runat="server">
<Columns>
<dx:ListBoxColumn Caption="编号" FieldName="TyID" />
</Columns>
</dx:ASPxListBox>
</td>
</tr>
</table>
<div style="display: none;"> </div>
</div>
</form>
</body>
</html>

三、CS 代码

   public partial class WebForm1 : System.Web.UI.Page
{
public static DataTable dtMaster;//用户主表
public static DataTable dtItem;//用户表 与 类型表的关联关系表
public static DataTable dtType;//类型表
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//.....................................................................
//创建表 添加行列
//.....................................................................
dtMaster = new DataTable();
dtMaster.Columns.Add("YgID",Type.GetType("System.String"));
dtMaster.Columns.Add("Name", Type.GetType("System.String"));
//----------------------
DataRow dr = dtMaster.NewRow();
dr["YgID"] = "Y01";
dr["Name"] = "同学1";
dtMaster.Rows.Add(dr);
//..................
DataRow dr2 = dtMaster.NewRow();
dr2["YgID"] = "Y02";
dr2["Name"] = "同学2";
dtMaster.Rows.Add(dr2);
//.....................................................................
dtType = new DataTable();
dtType.Columns.Add("TyID", Type.GetType("System.String"));
dtType.Columns.Add("TyName", Type.GetType("System.String"));
//----------------------
DataRow Tydr = dtType.NewRow();
Tydr["TyID"] = "T01";
Tydr["TyName"] = "类型1";
dtType.Rows.Add(Tydr);
//..................
DataRow Tydr2 = dtType.NewRow();
Tydr2["TyID"] = "T02";
Tydr2["TyName"] = "类型2";
dtType.Rows.Add(Tydr2);
//.....................................................................
dtItem = new DataTable();
dtItem.Columns.Add("YgID", Type.GetType("System.String"));
dtItem.Columns.Add("TyID", Type.GetType("System.String"));
//----------------------
DataRow dr1_ = dtItem.NewRow();
dr1_["YgID"] = "Y01";
dr1_["TyID"] = "T02";
dtItem.Rows.Add(dr1_);
//..................
DataRow dr2_ = dtItem.NewRow();
dr2_["YgID"] = "Y02";
dr2_["TyID"] = "T01";
dtItem.Rows.Add(dr2_);
//..................
this.grid.DataSource = dtMaster;
this.grid.DataBind();
this.gridRole.DataSource = dtType;
this.gridRole.DataBind();
}
} protected void grid_CustomColumnDisplayText(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewColumnDisplayTextEventArgs e)
{
if (e.Column.VisibleIndex == )
{
e.DisplayText = (e.VisibleRowIndex + ).ToString();
}
} protected void gridRole_CustomCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewCustomCallbackEventArgs e)
{
string userid = Convert.ToString(grid.GetRowValues(grid.FocusedRowIndex, "YgID"));
ASPxGridView gd = sender as ASPxGridView;
gd.Selection.UnselectAll();
DataTable dt = GetUsr(userid);
for (int i = ; i < gd.VisibleRowCount; i++)
{
string RoleIdRow = string.Empty;
RoleIdRow = Convert.ToString((gd.GetRowValues(i, "TyID")));
if (RoleIdRow != string.Empty)
{
if (dt != null && dt.Rows.Count > )
{
for (int j = ; j < dt.Rows.Count; j++)
{
string roleDs = Convert.ToString(dt.Rows[j]["TyID"]);
if (RoleIdRow == roleDs)
{
gd.Selection.SelectRow(i);
}
}
}
}
}
} DataTable GetUsr(string usr)
{
DataTable dtItem_ = new DataTable();
dtItem_.Columns.Add("YgID", Type.GetType("System.String"));
dtItem_.Columns.Add("TyID", Type.GetType("System.String"));
for (int i = ; i < dtItem.Rows.Count;i++ )
{
if (usr == dtItem.Rows[i]["YgID"].ToString())
{
DataRow dr = dtItem_.NewRow();
dr["YgID"] = dtItem.Rows[i]["YgID"].ToString();
dr["TyID"] = dtItem.Rows[i]["TyID"].ToString();
dtItem_.Rows.Add(dr);
}
}
return dtItem_;
} /// <summary>
/// 保存
/// </summary>
private void SaveUserRole()
{
string sUserId = Convert.ToString(grid.GetRowValues(grid.FocusedRowIndex, "UserId"));
int iResult = ;
string RoldIdList = string.Empty;
string url = string.Empty;
for (int i = ; i < lsbRoleId.Items.Count; i++)
{
RoldIdList += lsbRoleId.Items[i].ToString() + ',';
}
//## 插入到数据库语句
lsbRoleId.Items.Clear();
}
/// <summary>
/// 保存按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param> protected void Button1_Click(object sender, EventArgs e)
{
SaveUserRole();
} }

ASPxGridView 选中主表一行数据,从表自动选中(勾选)对应的行的更多相关文章

  1. gridview 一个列勾选框选中,同时选中同一行的另一列勾选框

    <asp:TemplateColumn > <HeaderTemplate> 是否显示 <asp:CheckBox ID="chk_Show" sty ...

  2. datatables01 安装、数据源、选中行事件、新增一行数据、删除一行数据

    1 安装 1.1 引入必要文件 要在项目中使用datatables需要引入三个文件 >DataTables CSS >jQuery >DataTables JS <!-- Da ...

  3. Go语言根据数据表自动生成model以及controller代码

    手写model的用法请参考: https://www.jianshu.com/p/f5784b8c00d0 这里仅说明自动生成model文件的过程 bee generate appcode -tabl ...

  4. 基于querybuilder的可根据现有数据表自动生成Restful API的dotnet中间件

    AutoApi 基于SqlKata Query Builder的可根据数据表自动生成Restful API的dotnet中间件 项目地址 Github Gitee 支持的数据库 MySql AutoA ...

  5. winform代码:关联窗体数据更新,删除dataGridview中选中的一行或多行

    一.关联窗体数据更新 关联窗体数据修改时,如果一个为总体数据显示窗体A,另一个为详细修改窗体B,从A进入B,在B中对数据进行修改,然后返回A,这时A窗体的数据需要更新. 我采用最简单的方法,首先保证每 ...

  6. jqgrid 选中行触发编辑,切换下一行时验证和异步保存上一行数据

    有时,我们需要批量修改或填写一些相似的数据.可以以jqgrid表来显示,可能的效果如下: 选中触发行编辑参考:jqgrid 单击行启用行编辑,切换行保存原编辑行 本文主要说说验证和异步保存上一条数据的 ...

  7. RS交叉表自动汇总后百分比列显示错误之解决方案

    可以说在从事Cognos开发的过程中,仅仅对数据展现而言,大多数用户使用最多的工具便是Report Studio了,此工具可以帮助我们快速的构建一些可供用户自主选择的数据报告.当然我个人认为没有什么开 ...

  8. DataGridView添加一行数据、全选、取消全选、清空数据、删除选中行

    .net 2005下的Windows Form Application,一个DataGridView控件和4个Button,界面设置如下:         代码如下,有注解,相信大家都看得明白:   ...

  9. Idea根据表自动生成实体

    Idea根据表自动生成实体: 首先说下这种方式有个缺点,就是如果表里面有日期.时间类型,那么需要手动的设置映射类型 第一步:在Idea中配置好数据库: 在Idea窗口右边,点击Database按钮 配 ...

随机推荐

  1. Javascript高级编程学习笔记(27)—— BOM(1)window对象1

    ECMAScript是JS的核心 但是对于在浏览器中运行的JS,BOM显然才是真正的核心 我们知道JS是由三个部分组成的 BOM.DOM.ECMAScript 之前的文章我们主要介绍的是ECMAScr ...

  2. 四、activiti工作流-第一个HelloWorld

    上一节已经把流程图画好,并且数据库也已经创建好了25张表,这节讲如何启动一个流程 先新建一个包,并新建一个类. /**然后定义一个成员属性,主要是因为每个方法都要用到这个引擎 * 获取默认流程引擎实例 ...

  3. 使用webmagic爬虫对百度百科进行简单的爬取

    分析要爬取的网页源码: 1.打开要分析的网页,查看源代码,找到要爬取的内容: (选择网页里的一部分右击审查元素也行) 2.导入jar包,这个就直接去网上下吧: 3.写爬虫: package com.g ...

  4. 机器学习入门05 - 泛化 (Generalization)

    原文链接:https://developers.google.com/machine-learning/crash-course/generalization 泛化是指模型很好地拟合以前未见过的新数据 ...

  5. 树莓派连接不上WiFi

    之前还好好的,突然连接不上WiFi,打开文件WiFi配置文件:/etc/wpa_supplicant/wpa_supplicant.conf发现有多个连接记录,把用到的留下,其他的删掉即可: sudo ...

  6. 利用max-height适应多尺寸屏幕的下拉动画

    移动设备的特点之一便是屏幕尺寸多种多样,所以我们在制作针对移动设备的动画时必须不同尺寸屏幕的兼容性.比如我们要制作以下动画:红框2为详细内容,默认收起:红框1处为事件响应热区,点击后展开或收起红框2的 ...

  7. sessionStorage 基本使用

    sessionStorage 是浏览器数据存储的方法之一,用于临时保存同一窗口的数据,关闭窗口后sessionStorage 的数据将会不存在,它是以 key value 键值对的形式储存. 基本用法 ...

  8. TensorflowSharp安装和使用入门

    Tensorflow是一个人工智能框架.TensorflowSharp是对Tensorflow C语言版接口的封装,便于C#开发人员在项目中使用Tensorflow. 一.使用方法 Tensorflo ...

  9. LINUX负载均衡LVS-NAT搭建

    1.搭建前的规划工作 这里从lvs官方网站找了一个nat模型的图,如下: 我这里使用虚拟机模拟出了4台rhel6机器.一台服务器作为lvs调度器(40网段使用的都是仅主机模式,168网段使用桥接模式) ...

  10. 机器学习基础:(Python)训练集测试集分割与交叉验证

    在上一篇关于Python中的线性回归的文章之后,我想再写一篇关于训练测试分割和交叉验证的文章.在数据科学和数据分析领域中,这两个概念经常被用作防止或最小化过度拟合的工具.我会解释当使用统计模型时,通常 ...