C# 两个DataGridView数据移动问题需求:
1、选择上部DataGridView药品信息后,点击分配按钮,上部DataGridView所选药品信息去除,增加到下部DataGridView中(分配按钮)
2、选择下部DataGridView药品信息后,点击撤消分配按钮,下部DataGridView所选药品信息去除,增加到上部DataGridView中(撤消分配按钮)
1、选择上部DataGridView药品信息后,点击分配按钮,上部DataGridView所选药品信息去除,增加到下部DataGridView中(分配按钮)
2、选择下部DataGridView药品信息后,点击撤消分配按钮,下部DataGridView所选药品信息去除,增加到上部DataGridView中(撤消分配按钮)
ArrayList AL = new ArrayList();
ArrayList ALDetail = new ArrayList();
#region 明细表datagridview 事件
private void dgvDocSaleD_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
try
{
if (this.dgvDocSaleD.Rows.Count > 0)
{ if (e.ColumnIndex == 0 && e.RowIndex != -1)
{
if (this.dgvDocSaleD.Rows[e.RowIndex].Cells[0].EditedFormattedValue.ToString() == "True")
{
ALDetail.Add(dgvDocSaleD.SelectedRows[0].Cells["MedID"].Value.ToString());
}
else
{
return;
} }
}
}
catch (Exception ex)
{
CommonFun.Message_Error(ex.Message);
}
}
#endregion #region 分配事件
private void Allot()
{
try
{
//获取所选药品主键
string strItems = null; if (AL.Count > 0)
{
foreach (Object obj in AL)
{
strItems += obj.ToString() + ",";
} //去除最后一个","
strItems = strItems.Substring(0, strItems.Length - 1); //B、分配按钮事件中把上部DataGridView 数据源中相关行号的药品加入到下部 DataGridView数据源中,重新绑定下部 DataGridView数据。
//将所选药品添加到下部临时表中
AddDetailData(strItems); //把上部DataGridView 数据源中相关行号的药品去除,再重新绑定上部 DataGridView数据。
//从上部临时表中去除所选药品信息
SubMainData(strItems); //清除数组
AL.Clear();
}
else
{
CommonFun.Message_ExclamationOk("请选择药品信息!");
}
}
catch (Exception ex)
{
CommonFun.Message_Error(ex.Message);
}
}
#endregion #region add明细表的数据
private void AddDetailData(string DOCNO)
{
DataTable dt = (DataTable)dgvDocSaleM.DataSource; DataView dv = dt.DefaultView;
dv.RowFilter = "MedID IN (" + DOCNO + ")"; DataTable dtX = dv.ToTable(); if (dtX != null && dtX.Rows.Count > 0)
{
this.dgvDocSaleD.DataSource = UniteDataTable(dtX, (DataTable)dgvDocSaleD.DataSource);
}
}
#endregion #region Sub主表的数据
private void SubMainData(string DOCNO)
{
//判断是否有明细信息
if (this.dgvDocSaleM.Rows.Count > 0)
{
DataTable dt = (DataTable)dgvDocSaleM.DataSource;
DataView dv = dt.DefaultView;
//dv.RowFilter = "MedID NOT IN ( '" + DOCNO + "'" + ")";
dv.RowFilter = "MedID NOT IN (" + DOCNO + ")";
dgvDocSaleM.DataSource = dv.ToTable();
}
else
{
//页面初始化
SetUIStyle();
}
}
#endregion #region 撤消分配事件
private void UndoAllot()
{
try
{
//获取所选药品主键
string strItems = null; if (ALDetail.Count > 0)
{
foreach (Object obj in ALDetail)
{
strItems += obj.ToString() + ",";
}
//去除最后一个","
strItems = strItems.Substring(0, strItems.Length - 1); //B、撤消分配按钮事件中把下部DataGridView 数据源中相关行号的药品加入到上部 DataGridView数据源中,重新绑定上部 DataGridView数据。
//将所选药品添加到上部临时表中
AddMainData(strItems); //把下部DataGridView 数据源中相关行号的药品去除,再重新绑定下部 DataGridView数据。
//从下部临时表中去除所选药品信息
SubDetailData(strItems); //清除数组
ALDetail.Clear();
}
else
{
CommonFun.Message_ExclamationOk("请选择药品信息!");
}
}
catch (Exception ex)
{
CommonFun.Message_Error(ex.Message);
}
}
#endregion #region add主表的数据
private void AddMainData(string DOCNO)
{
DataTable dt = (DataTable)dgvDocSaleD.DataSource; DataView dv = dt.DefaultView;
dv.RowFilter = "MedID IN (" + DOCNO + ")"; DataTable dtX = dv.ToTable(); if (dtX != null && dtX.Rows.Count > 0)
{
this.dgvDocSaleM.DataSource = UniteDataTable(dtX, (DataTable)dgvDocSaleM.DataSource);
}
}
#endregion #region Sub明细表信息
private void SubDetailData(string DOCNO)
{
//判断是否有明细信息
if (this.dgvDocSaleD.Rows.Count > 0)
{
DataTable dt = (DataTable)dgvDocSaleD.DataSource;
DataView dv = dt.DefaultView;
dv.RowFilter = "MedID NOT IN (" + DOCNO + ")";
dgvDocSaleD.DataSource = dv.ToTable();
}
else
{
//页面初始化
SetUIStyle();
}
}
#endregion #region 合并数据表
private DataTable UniteDataTable(DataTable DataTable1, DataTable DataTable2)
{
DataTable newDataTable = DataTable1.Clone(); object[] obj = new object[newDataTable.Columns.Count];
for (int i = 0; i < DataTable1.Rows.Count; i++)
{
DataTable1.Rows[i].ItemArray.CopyTo(obj, 0);
newDataTable.Rows.Add(obj);
}
if (DataTable2 != null)
{
for (int i = 0; i < DataTable2.Rows.Count; i++)
{
DataTable2.Rows[i].ItemArray.CopyTo(obj, 0);
newDataTable.Rows.Add(obj);
}
}
return newDataTable;
}
#endregion