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按钮 配 ...
随机推荐
- W3bsafe]SQLmap过狗命令的利用+教程
W3bsafe]SQLmap过狗命令的利用+教程 本文转自:i春秋社区 我就是那个爱装逼的小人 本屌又来装逼了 SQLmap注入的时候 有的肯定会被安全狗拦截吧 本屌来教各位过狗!过waf等安全狗 ...
- Python的基础语法(二)
0. 前言 接着上一篇博客的内容,我将继续介绍Python相关的语法.部分篇章可能不只是简单的语法,但是对初学者很有帮助,也建议读懂. 1. 表达式 由数字.符号.括号.变量等组成的组合. 算术表达式 ...
- LVS DR模式配置
关于LVS的相关介绍,以下两篇文章均做了具体的介绍: http://www.linuxvirtualserver.org/zh/lvs1.html http://www.cnblogs.com/liw ...
- 解读JavaScript 之引擎、运行时和堆栈调用
转载自开源中国 译者:Tocy, 凉凉_, 亚林瓜子, 离诌 原文链接 英文原文:How JavaScript works: an overview of the engine, the runtim ...
- IntelliJ IDEA如何设置新建类时,自动注释作者信息和日期时间
本文提供两种注释风格供参考. 风格1:简约Style 效果如下: 设置步骤: File--> Settings--> Editor--> File and Code Template ...
- ZOJ Problem Set - 1730 Crazy Tea Party
#include<cstdio> int main(){ int T,n; scanf("%d",&T); while(T--){ scanf("%d ...
- ⑤早起的鸟儿有虫吃-JSTL核心标签库[收藏]
介绍 JSTL 全名为Java Server Pages Standard Tag Library(JSP Standard Tag Library),它的中文名称为JSP 标准标签函数库. Web ...
- go基础系列:数组
了解Python.Perl.JavaScript的人想必都知道它们的数组是动态的,可以随需求自动增大数组长度.但Go中的数组是固定长度的,数组一经声明,就无法扩大.缩减数组的长度.但Go中也有类似的动 ...
- SpringBoot之Swagger2的使用
Swagger是一组围绕OpenAPI规范构建的开源工具,可帮助设计.构建.记录和使用REST API.简单说下,它的出现就是为了方便进行测试后台的restful形式的接口,实现动态的更新,当我们在后 ...
- Spring Cloud Stream消费失败后的处理策略(四):重新入队(RabbitMQ)
应用场景 之前我们已经通过<Spring Cloud Stream消费失败后的处理策略(一):自动重试>一文介绍了Spring Cloud Stream默认的消息重试功能.本文将介绍Rab ...