ASPxGridView 选中主表一行数据,从表自动选中(勾选)对应的行
一、图解
下图为效果图,点击 【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> </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 选中主表一行数据,从表自动选中(勾选)对应的行的更多相关文章
- gridview 一个列勾选框选中,同时选中同一行的另一列勾选框
<asp:TemplateColumn > <HeaderTemplate> 是否显示 <asp:CheckBox ID="chk_Show" sty ...
- datatables01 安装、数据源、选中行事件、新增一行数据、删除一行数据
1 安装 1.1 引入必要文件 要在项目中使用datatables需要引入三个文件 >DataTables CSS >jQuery >DataTables JS <!-- Da ...
- Go语言根据数据表自动生成model以及controller代码
手写model的用法请参考: https://www.jianshu.com/p/f5784b8c00d0 这里仅说明自动生成model文件的过程 bee generate appcode -tabl ...
- 基于querybuilder的可根据现有数据表自动生成Restful API的dotnet中间件
AutoApi 基于SqlKata Query Builder的可根据数据表自动生成Restful API的dotnet中间件 项目地址 Github Gitee 支持的数据库 MySql AutoA ...
- winform代码:关联窗体数据更新,删除dataGridview中选中的一行或多行
一.关联窗体数据更新 关联窗体数据修改时,如果一个为总体数据显示窗体A,另一个为详细修改窗体B,从A进入B,在B中对数据进行修改,然后返回A,这时A窗体的数据需要更新. 我采用最简单的方法,首先保证每 ...
- jqgrid 选中行触发编辑,切换下一行时验证和异步保存上一行数据
有时,我们需要批量修改或填写一些相似的数据.可以以jqgrid表来显示,可能的效果如下: 选中触发行编辑参考:jqgrid 单击行启用行编辑,切换行保存原编辑行 本文主要说说验证和异步保存上一条数据的 ...
- RS交叉表自动汇总后百分比列显示错误之解决方案
可以说在从事Cognos开发的过程中,仅仅对数据展现而言,大多数用户使用最多的工具便是Report Studio了,此工具可以帮助我们快速的构建一些可供用户自主选择的数据报告.当然我个人认为没有什么开 ...
- DataGridView添加一行数据、全选、取消全选、清空数据、删除选中行
.net 2005下的Windows Form Application,一个DataGridView控件和4个Button,界面设置如下: 代码如下,有注解,相信大家都看得明白: ...
- Idea根据表自动生成实体
Idea根据表自动生成实体: 首先说下这种方式有个缺点,就是如果表里面有日期.时间类型,那么需要手动的设置映射类型 第一步:在Idea中配置好数据库: 在Idea窗口右边,点击Database按钮 配 ...
随机推荐
- [Postman]创建第一个集合(2)
邮递员收藏是一组可以组织到文件夹中的已保存请求. 您在Postman中发送的每个请求都会显示在侧栏的“ 历史记录”选项卡下.在小规模上,通过历史部分重用请求很方便.但是,随着邮递员使用量的增加,在历史 ...
- Python中高级变量类型(列表,元组,字典,字符串,公共方法...)
高级变量类型 目标 列表 元组 字典 字符串 公共方法 变量高级 知识点回顾 Python 中数据类型可以分为 数字型 和 非数字型 数字型 整型 (int) 浮点型(float) 布尔型(bool) ...
- css、css3总结
关于figure元素和figcaption元素的解释与应用: https://www.w3cplus.com/html5/quick-tip-the-right-way-to-use-figure-a ...
- sql server 高可用故障转移(5)
测试故障转移群集报告 在SQL-CL01(hsr 50)进行故障转移群集的创建,如图下图所示,在SQL-CL01和SQL-CL02的“服务器管理”中右键点击“功能”,选择“添加功能 勾选故障转移群集 ...
- Redis 事物
MULTI . EXEC . DISCARD 和 WATCH 是 Redis 事务的基础. Multi 和 Exec Multi:开启一个事务,它总是返回 OK .执行之后, 客户端可以继续向服务器发 ...
- Flex(ActionScript)与JavaScript交互的两种方式示例
随着各单位部门信息化进程的不断发展,互通互联.共享协调不断的被越来越多的客户所重视.很多新项目都要去必须能够集成已有的早期系统,至少也要能够实现交互对接.今天跟大家分享的是系统对接中ActionScr ...
- leetcode — permutation-sequence
import java.util.ArrayList; import java.util.List; /** * Source : https://oj.leetcode.com/problems/p ...
- leetcode — combination-sum
import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Source : https://o ...
- ES6躬行记(11)——对象
在第5篇中,讲解了多个对象字面量的改进,本节将重点介绍两个新增的静态方法,以及对象属性的重复处理和枚举顺序. 一.Object.is() 此方法用于判断两个值是否相同,内部实现了SameValue算法 ...
- shell脚本--cut命令
bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 1.1 选项说明 cut命令将行按指定的分隔符分割成多列,它的 ...