C# 往SQL数据库插入listbox的值
各位大哥,求教一个问题:我现在在页面上通过绑定数据库,实现了两个不同listbox之间数据的交替,问题是怎样在C#中获取到“dxListU_R”的值,并且把它插入到数据库中,通过关联“dxCobRole”的值,更新我的另一张SQL表里面相关的“用户角色”的关联信息?
表达或许不是很清楚,望大家见谅个,在线等,诚心求教!HTML代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="UserRole.aspx.cs" Inherits="Webtest.UserRole.UserRole" %>
<%@ Register assembly="DevExpress.Web.v13.1, Version=13.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" namespace="DevExpress.Web.ASPxEditors" tagprefix="dx" %>
<%@ Register assembly="DevExpress.Web.v13.1, Version=13.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" namespace="DevExpress.Web.ASPxHeadline" tagprefix="dx" %>
<%@ Register assembly="DevExpress.Web.v13.1, Version=13.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" namespace="DevExpress.Web.ASPxPanel" tagprefix="dx" %>
<%@ Register assembly="DevExpress.Web.v13.1, Version=13.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" namespace="DevExpress.Web.ASPxRoundPanel" tagprefix="dx" %>
<%@ Register assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" namespace="Microsoft.Reporting.WebForms" tagprefix="rsweb" %>
<%@ Register assembly="DevExpress.Web.v13.1, Version=13.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" namespace="DevExpress.Web.ASPxDocking" tagprefix="dx" %>
<%@ Register assembly="DevExpress.Web.v13.1, Version=13.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" namespace="DevExpress.Web.ASPxPopupControl" tagprefix="dx" %>
<!DOCTYPE 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>
<style type="text/css">
.auto-style1 {
width: 95%;
height: 36px;
}
.auto-style2 {
width: 100px;
}
.auto-style3 {
width: 137px;
}
.auto-style5 {
width: 116px;
}
</style>
</head>
<body style="height: 851px; width: 733px">
<form id="FrmUserRole" runat="server">
<%-- 编写JS验证方法--%>
<script type="text/javascript" >
function AddSelectedItems() {
MoveSelectedItems(dxListUser, dxListU_R);
UpdateButtonState();
}
function AddAllItems() {
MoveAllItems(dxListUser, dxListU_R);
UpdateButtonState();
}
function RemoveSelectedItems() {
MoveSelectedItems(dxListU_R, dxListUser);
UpdateButtonState();
}
function RemoveAllItems() {
MoveAllItems(dxListU_R, dxListUser);
UpdateButtonState();
}
function MoveSelectedItems(srcListBox, dstListBox) {
srcListBox.BeginUpdate();
dstListBox.BeginUpdate();
var items = srcListBox.GetSelectedItems();
for(var i = items.length - 1; i >= 0; i = i - 1) {
dstListBox.AddItem(items[i].text, items[i].value);
srcListBox.RemoveItem(items[i].index);
}
srcListBox.EndUpdate();
dstListBox.EndUpdate();
}
function MoveAllItems(srcListBox, dstListBox) {
srcListBox.BeginUpdate();
var count = srcListBox.GetItemCount();
for(var i = 0; i < count; i++) {
var item = srcListBox.GetItem(i);
dstListBox.AddItem(item.text, item.value);
}
srcListBox.EndUpdate();
srcListBox.ClearItems();
}
function UpdateButtonState() {
dxBtnAddAllToRight.SetEnabled(dxListUser.GetItemCount() > 0);
dxBtnDelAllToLeft.SetEnabled(dxListU_R.GetItemCount() > 0);
dxBtnAddToRight.SetEnabled(dxListUser.GetSelectedItems().length > 0);
dxBtnDelToLeft.SetEnabled(dxListU_R.GetSelectedItems().length > 0);
}
</script>
<div style="height: 831px; width: 694px">
<table class="auto-style1">
<tr>
<td class="auto-style2">
<dx:ASPxButton ID="dxBtnSubmit" runat="server" Height="25px" Text="确定" Width="99px">
</dx:ASPxButton>
</td>
<td>
<dx:ASPxButton ID="dxBtnCancel" runat="server" Text="取消">
</dx:ASPxButton>
</td>
</tr>
</table>
<table class="auto-style1">
<tr>
<td class="auto-style5">
<dx:ASPxLabel ID="dxlblRole" runat="server" Text="角色">
</dx:ASPxLabel>
</td>
<td class="auto-style3">
<dx:ASPxComboBox ID="dxCobRole" runat="server" DataSourceID="ListRole" SelectedIndex="0">
<Columns>
<dx:ListBoxColumn FieldName="RoleName" Caption="角色名称" />
</Columns>
</dx:ASPxComboBox>
<asp:SqlDataSource ID="ListRole" runat="server" ConnectionString="<%$ ConnectionStrings:E-ERP-TEST %>" SelectCommand="SELECT [RoleName], [Id] FROM [T_ERP_Role]"></asp:SqlDataSource>
</td>
<td class="auto-style3">
</td>
</tr>
<tr>
<td class="auto-style5" rowspan="4">
<dx:ASPxListBox ID="dxListUser" runat="server" DataSourceID="ListUser" Height="356px" Rows="10" SelectionMode="CheckColumn" TextField="UserName" >
<Columns>
<dx:ListBoxColumn FieldName="UserName" Caption="用户信息" />
</Columns>
<ClientSideEvents SelectedIndexChanged="function(s, e) { UpdateButtonState(); }">
</ClientSideEvents>
</dx:ASPxListBox>
<asp:SqlDataSource ID="ListUser" runat="server" ConnectionString="<%$ ConnectionStrings:E-ERP-TEST %>" SelectCommand="SELECT [UserName], [UserID] FROM [T_ERP_User]">
</asp:SqlDataSource>
</td>
<td class="auto-style3">
<dx:ASPxButton ID="dxBtnAddToRight" runat="server" Text=">>" ClientEnabled="False" ToolTip="Add selected items" ClientInstanceName="dxBtnAddToRight">
<ClientSideEvents Click="function(s, e) { AddSelectedItems(); }" />
</dx:ASPxButton>
</td>
<td class="auto-style3" rowspan="4">
<dx:ASPxListBox ID="dxListU_R" runat="server" DataSourceID="ListU_R" Height="361px" SelectionMode="CheckColumn" TextField="RoleName" >
<Columns>
<dx:ListBoxColumn FieldName="UserName" Caption="已包含用户" />
</Columns>
<ClientSideEvents SelectedIndexChanged="function(s, e) { UpdateButtonState(); }"></ClientSideEvents>
</dx:ASPxListBox>
<asp:SqlDataSource ID="ListU_R" runat="server" ConnectionString="<%$ ConnectionStrings:E-ERP-TEST %>" SelectCommand="SELECT b.UserName, c.RoleName FROM T_ERP_Users_Role AS a INNER JOIN T_ERP_User AS b ON a.User_Id = b.UserID INNER JOIN T_ERP_Role AS c ON a.Role_Id = c.Id WHERE (c.[RoleName] = @RoleName)">
<SelectParameters>
<asp:FormParameter DefaultValue=" " FormField="dxCobRole" Name="RoleName" Type="Object" Size="250" />
</SelectParameters>
</asp:SqlDataSource>
</td>
</tr>
<tr>
<td class="auto-style3">
<dx:ASPxButton ID="dxBtnAddAllToRight" runat="server" Text="ALL>>" ToolTip="Add all items" ClientInstanceName="dxBtnAddAllToRight">
<ClientSideEvents Click="function(s, e) { AddAllItems(); }" />
</dx:ASPxButton>
</td>
</tr>
<tr>
<td class="auto-style3">
<dx:ASPxButton ID="dxBtnDelToLeft" runat="server" Text="<<" ToolTip="Remove selected items" ClientInstanceName="dxBtnDelToLeft">
<ClientSideEvents Click="function(s, e) { RemoveSelectedItems(); }" />
</dx:ASPxButton>
</td>
</tr>
<tr>
<td class="auto-style3">
<dx:ASPxButton ID="dxBtnDelAllToLeft" runat="server" Text="<<ALL" ToolTip="Remove all items" ClientInstanceName="dxBtnDelAllToLeft">
<ClientSideEvents Click="function(s, e) { RemoveAllItems(); }" />
</dx:ASPxButton>
</td>
</tr>
</table>
<br />
</div>
</form>
</body>
</html>
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Windows.Forms;
namespace eAbaxReport
{
//用于统一处理两个List类型控件之间互相转移Items
public class AddRemoveItem<T>
{
//从一个ListBox中删除Items
public void RemoveItems(ListBox lstBox, IEnumerable items)
{
if (typeof(T) == typeof(DataRow))
{
if (lstBox.Items.Count > 0)
{
DataTable dt = ((DataTable)lstBox.DataSource);
DataTable newDt = dt.Clone();
bool flag = false;
//因为直接删除DataRow会保存,所以用这样丑陋的方式处理了
foreach (DataRow dr in dt.Rows)
{
foreach (DataRowView item in items)
{
if (dr["numID"].ToString().Equals(item.Row["numID"].ToString()))
{
flag = true;
break;
}
else
flag = false;
}
if (!flag)
newDt.Rows.Add(dr.ItemArray);
else
continue;
}
lstBox.DataSource = newDt;
}
}
else
{
List<T> lst = new List<T>();
lst.AddRange((List<T>)lstBox.DataSource);
lst.RemoveAll(delegate(T item1)
{
foreach (T item2 in items)
{
if (item1.Equals(item2))
return true;
}
return false;
});
lstBox.DataSource = lst;
}
}
public string Test(ListBox lstBox, IEnumerable items)
{
string str = string.Empty;
if (typeof(T) == typeof(DataRow))
{
if (lstBox.Items.Count > 0)
{
DataTable dt = ((DataTable)lstBox.DataSource);
DataTable newDt = dt.Clone();
//因为直接删除DataRow会保存,所以用这样丑陋的方式处理了
foreach (DataRow dr in dt.Rows)
{
str += dr["showName"].ToString() + "
[解决办法]
";
}
foreach (DataRowView item in items)
{
str += item.Row["showName"].ToString() + "
[解决办法]
";
}
}
}
return str;
}
//向一个ListBox中添加Items
public void AddItems(ListBox lstBox, IEnumerable items)
{
if (typeof(T) == typeof(DataRow))
{
DataTable dt = null;
foreach (object item in items)
{
if (item is DataRowView)
dt = ((DataRowView)item).Row.Table.Clone();
if (item is DataRow)
dt = ((DataRow)item).Table.Clone();
break;
}
if (lstBox.DataSource != null)
dt = ((DataTable)lstBox.DataSource).Copy();
foreach (object item in items)
{
if (item is DataRowView)
dt.Rows.Add(((DataRowView)item).Row.ItemArray);
if (item is DataRow)
dt.Rows.Add(((DataRow)item).ItemArray);
}
lstBox.DataSource = dt;
}
else
{
List<T> lst = new List<T>();
if (lstBox.DataSource != null)
lst.AddRange((List<T>)lstBox.DataSource);
foreach (T item in items)
{
lst.Add(item);
}
lstBox.DataSource = lst;
}
}
//将ListBox1的选定项转移到ListBox2中,并从ListBox1中去除
public void Move(ListBox lstBox1, ListBox lstBox2)
{
if (lstBox1.SelectedItems.Count > 0)
{
AddItems(lstBox2, lstBox1.SelectedItems);
RemoveItems(lstBox1, lstBox1.SelectedItems);
}
}
//将整个lstBox1的项转移到ListBox2中,并清空ListBox1
public void MoveAll(ListBox lstBox1, ListBox lstBox2)
{
if (typeof(T) == typeof(DataRow))
{
DataTable dt = (DataTable)lstBox1.DataSource;
AddItems(lstBox2, dt.Rows);
lstBox1.DataSource = dt.Clone();
}
else
{
AddItems(lstBox2, (List<T>)lstBox1.DataSource);
lstBox1.DataSource = new List<T>();
}
}
/// <summary>
/// lstBox2克隆lstBox1的值
/// </summary>
/// <param name="lstBox1"></param>
/// <param name="lstBox2"></param>
public void CloneListBoxItems(ListBox lstBox1, ListBox lstBox2)
{
if (typeof(T) == typeof(DataRow))
{
DataTable dt = (DataTable)lstBox1.DataSource;
AddItems(lstBox2, dt.Rows);
//lstBox1.DataSource = dt.Clone();
}
else
{
AddItems(lstBox2, (List<T>)lstBox1.DataSource);
lstBox1.DataSource = new List<T>();
}
}
/// <summary>
/// 交换两个选项的位置
/// </summary>
/// <param name="lstBox"></param>
/// <param name="itemIndex1">交换索引1</param>
/// <param name="itemIndex2">交换索引2</param>
public void ListItemSwap(ListBox lstBox, int itemIndex1, int itemIndex2)
{
object temp = lstBox.Items[itemIndex2];
lstBox.Items[itemIndex2] = lstBox.Items[itemIndex1];
lstBox.Items[itemIndex1] = temp;
}
/// <summary>
/// 交换两个选项的位置(修改数据源)
/// </summary>
/// <param name="lstBox"></param>
/// <param name="rowIndex1">选中项索引</param>
/// <param name="rowIndex2">交换后索引</param>
public void ItemUpAndDown(ListBox lstBox, int rowIndex1, int rowIndex2)
{
DataTable dt = (DataTable)lstBox.DataSource;
DataTable newDt = dt.Clone();
int columnCount = dt.Columns.Count;
newDt.Rows.Add();
newDt.Rows.Add();
for (int i = 0; i < columnCount; i++)
{
newDt.Rows[0][i] = dt.Rows[rowIndex2][i];
newDt.Rows[1][i] = dt.Rows[rowIndex1][i];
}
for (int i = 0; i < columnCount; i++)
{
dt.Rows[rowIndex2][i] = newDt.Rows[1][i];
dt.Rows[rowIndex1][i] = newDt.Rows[0][i];
}
lstBox.DataSource = dt;
}
}
}
//调用方法!
private void btnGroupRight_Click(object sender, EventArgs e)
{
GroupRight();
}
public void GroupRight()
{
ListBox.SelectedObjectCollection items = listBoxGroupLeft.SelectedItems;
DataRowView rowView = (DataRowView)items[0];
string fieldType = rowView["fieldType"].ToString();
if (!fieldType.Equals("num"))
{
addRemoveItems.AddItems(listBoxGroupRight, items);
addRemoveItems.RemoveItems(listBoxGroupLeft, items);
EnableGroupBtn();
}
else
{ MessageBox.Show(this, "该字段分组没有意义!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error); }
}