一、图解

下图为效果图,点击 【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. 吴恩达机器学习笔记8-多变量线性回归(Linear Regression with Multiple Variables)--多维特征

    我们探讨了单变量/特征的回归模型,现在我们对房价模型增加更多的特征,例如房间数楼层等,构成一个含有多个变量的模型,模型中的特征为(

  2. 第四节:详细讲解Java中的类和面向对象思想

    前言 大家好,给大家带来详细讲解Java中的类和面向对象思想的概述,希望你们喜欢 类和面向对象 在Java中怎样理解对象,创建对象和引用:什么是引用,对于基础学习的同学,要深入了解引用.示例:Stri ...

  3. C#8个常用的字符串的操作

    1.根据单个分隔字符用split截取 string st="GT123_1"; string[] sArray=st.split('_'); 输出:sArray[0]=" ...

  4. 机器学习入门06 - 训练集和测试集 (Training and Test Sets)

    原文链接:https://developers.google.com/machine-learning/crash-course/training-and-test-sets 测试集是用于评估根据训练 ...

  5. virtualbox ubuntu 安装 openssh-server

    最近为了学 DevOps,自己动手在 virtualbox 上安装 ubuntu 系统,安装完后发现好坑,没办法用 XShell 连接.在线安装 openssh-server 又发现没有配置软件源,手 ...

  6. word标题文字居中浅谈

    在Word排版时,要将标题在文档居中,是有区别的,如下图 在回车键后,在选择标题居中,我们常认为标题就是在整个文档居中了,但是实际上只是在回车键到右边区域居中而已,如上图红色方块居中. 只有在标题文字 ...

  7. 【ABP框架系列学习】N层架构(3)

    目录 0.引言 1.DDD分层 2.ABP应用构架模型 客户端应用程序(Client Applications) 表现层(Presentation Layer) 分布式服务层(Distributed ...

  8. java提高(6)---Serializable

    Serializable--初解 一 序列化是干什么的? 我们知道,在jvm中引用数据类型存在于栈中,而new创建出的对象存在于堆中.如果电脑断电那么存在于内存中的对象就会丢失.那么有没有方法将对象保 ...

  9. Percona Server 升级 5.7 到 8.0 版本

    今天发现 Percona Server 已经发布了 8.0 的版本,于是把服务端的 MYSQL 的版本升级了下:备份好数据,升级按照官方的文档来 $ percona-release enable re ...

  10. Linux编程 12 (默认shell环境变量, PATH变量重要讲解)

    一 .概述 默认情况下, bash shell会用一些特定的环境变量来定义系统的环境.这些默认环境变量可以理解是上篇所讲的系统全局环境变量. 1.1 bash  shell支持的Bourne变量 Bo ...