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按钮 配 ...
随机推荐
- 脑残式网络编程入门(五):每天都在用的Ping命令,它到底是什么?
本文引用了公众号纯洁的微笑作者奎哥的技术文章,感谢原作者的分享. 1.前言 老于网络编程熟手来说,在测试和部署网络通信应用(比如IM聊天.实时音视频等)时,如果发现网络连接超时,第一时间想到的就是 ...
- Javascript高级编程学习笔记(21)—— 对象原型
JS中对象相关的最重要的恐怕就是原型链了 原型链也是JS中对象继承的实现的基础 接昨天的文章,我们使用构造函数创建对象的时候仍然存在一些问题 那就是所有的实例没法共用一个函数 这样无疑会造成极大的内存 ...
- webpack入门-个人学习资源收集
本来是想自己写哈个人学习webpack心德的,不过网上现在已经有各种比较好的,详细的入门或者深入资源了. 所以我就简单总结了一下,我在入门webpack时看的一些博客和文档,以及顺道看到的一些觉得也应 ...
- Git:fatal: Authentication failed
1.删除保存的用户名和密码 执行 下面的命令,删除保存的用户名和密码 git config --system --unset credential.helper 重新操作,提示输入用户名和密码,操作成 ...
- Redis Linux 安装运行实战全记录
下载Redis 去Redis官网下载最新的Linux包,Redis官方没有Windows版的下载. https://redis.io/ 下载后把包上传到Linux服务器. 安装Redis 1.解压Re ...
- 工作随笔—integer对象比较
问题:对于integer对象,当比较2==2的时候,返回的值是true还是false?当比较2000==2000的时候,返回的值是true还是false? 回答:当比较2==2的时候,返回的值是tru ...
- 【jQuery】(3)---Jquery操作Dom
1 内部插入节点 <body> <ul id="city"> <li id="bj" name=&qu ...
- Android内存优化之内存缓存
前言: 上面两篇博客已经讲了图片的基本知识和图片的加载方法及优化,所有的这些优化都是为了避免应用出现OOM这个问题.一个好的应用程序不仅要健壮不能出错还要方便用户使用,对于用户来说你的应用不仅要美观还 ...
- Java多线程之二(Synchronized)
常用API method 注释 run() run()方法是我们创建线程时必须要实现的方法,但是实际上该方法只是一个普通方法,直接调用并没有开启线程的作用. start() start()方法作用为使 ...
- <数据结构> 队列[转]
队列(queue)是一个简单而常见的数据结构.队列也是有序的元素集合.队列最大的特征是First In, First Out (FIFO,先进先出),即先进入队列的元素,先被取出.这一点与栈(stac ...