📄 commonservice.cs
字号:
}
else if(DataTypes[i]=="short")
{
types[i+1] = typeof(short);
}
else if(DataTypes[i]=="bool")
{
types[i+1] = typeof(bool);
}
else if(DataTypes[i]=="decimal")
{
types[i+1] = typeof(decimal);
}
else if(DataTypes[i]=="double")
{
types[i+1] = typeof(double);
}
else if(DataTypes[i]=="DateTime")
{
types[i+1] = typeof(DateTime);
}
else
{
return null;
}
}
return types;
}
catch(Exception e)
{
LogService.Write("public static Type[] ConvertDataType(SqlConnection SqlCn, string[] DataTypes)");
LogService.Write(e.Message);
return null;
}
}
/// **************************************************************************
/// END
/// **************************************************************************
/// **************************************************************************
/// BEIGIN
/// <summary>
/// 根据不同的删除方法进行不同的调用,对选中的数据进行删除(三期新版本)
/// </summary>
/// <param name="thePage">调用此方法的页面对象</param>
/// <param name="theDG">存储数据的DataGrid控件对象</param>
/// <param name="sql">删除之后重新绑定数据时所用的SQL语句,用ViewState["sql"].ToString()作为参数即可</param>
/// <param name="SessionName">用于和服务器进行交互的Session名称,建议使用"Data"和"Data1"两者中的一个</param>
/// <param name="CheckBoxName">存储选中标志的CheckBox控件的ID</param>
/// <param name="DataTypes">主关键字列表的数据类型组成的字符型数组,一定要按删除方法的参数的先后顺序排列</param>
/// <param name="Pk">存储主关键字的Hidden控件对象名组成的字符型数组,一定要按删除方法的参数的先后顺序排列</param>
/// <param name="ClassName">定义删除方法的类名称(需要给出完整路径)</param>
/// <param name="MethodName">删除方法的名称</param>
/// <param name="ErrorMessage">出错信息文本</param>
/// <returns>布尔型返回值,成功执行返回true,发生错误返回false</returns>
/// **************************************************************************
public static bool DelSelectRecord( System.Web.UI.Page thePage,
System.Web.UI.WebControls.DataGrid theDG,
string sql,
string SessionName,
string CheckBoxName,
string[] DataTypes,
string[] Pk,
string ClassName,
string MethodName,
string ErrorMessage)
{
//获取当前的流程ID(FlowId)
string FlowId = "";
//打开数据库连接
SqlConnection SqlCn = new SqlConnection (com.unicafe.common.Configuration.GetDBConnectionString());
SqlCn.Open();
SqlCommand cmd = SqlCn.CreateCommand();
try
{
//开始事务
SqlTransaction SqlTrans = SqlCn.BeginTransaction();
cmd.Transaction = SqlTrans;
//声明存储主关键字的变量
object[] obj = new object[DataTypes.Length];
//对本页上DataGrid的所有行进行遍历
for (int i=0; i<theDG.Items.Count; i++)
{
//将当前行赋值给一个DataGridItem对象
DataGridItem _item = theDG.Items[i];
//判断当前行上的CheckBox控件赋值给一个CheckBox对象
CheckBox CheckFlag = (CheckBox)_item.FindControl(CheckBoxName);
//判断当前行上的复选框是否被选中,如果被选中则进行删除处理,否则不予处理
if(CheckFlag.Checked == true)
{
//获取关键字的值,逐个加入对象数组obj
for (int j=0; j<Pk.Length; j++)
{
obj[j] = ((System.Web.UI.HtmlControls.HtmlInputHidden)_item.FindControl(Pk[j].ToString())).Value; //取各项主关键字
}
//调用删除方法进行删除处理,如果没有成功删除则回滚事务并打开错误提示页面
if(Reflection(ClassName, MethodName, DataTypes, obj, cmd) == false)
{
SqlTrans.Rollback();
//打开错误信息提示页面
Prompt.PromptError(thePage, ErrorMessage);
return false;
}
}
}
//提交数据库修改
SqlTrans.Commit();
//重新绑定DataGrid控件
if(CommonService.BindDataGrid(thePage,sql,theDG,SessionName,true) == false)
{
//打开错误信息提示页面
Prompt.PromptError(thePage, "已经成功删除选定的数据,但在重新绑定数据时发生错误。");
return false;
}
else
{
//判断此记录是否在某工作流中
FlowId = thePage.Request.QueryString["flowid"];
//LogService.Write("现在要删除的流程ID:" + FlowId);
if (FlowId != null)
{
WorkflowMgr wMgr = new WorkflowMgr();
wMgr.DelMessage(FlowId);
thePage.Response.Write("<script>");
thePage.Response.Write("window.parent.refreshOpener();");
thePage.Response.Write("window.parent.close();");
thePage.Response.Write("</script>");
}
}
return true;
}
catch(Exception e)
{
//打开错误信息提示页面
Prompt.PromptError(thePage, ErrorMessage);
LogService.Write(e.Message);
return false;
}
finally
{
SqlCn.Close();
}
}
/// **************************************************************************
/// END
/// **************************************************************************
/// **************************************************************************
/// BEIGIN
/// <summary>
/// 根据不同的情况调用不同的删除方法(三期新版本)
/// </summary>
/// <param name="ClassName">定义该删除方法的类名</param>
/// <param name="MethodName">删除方法名</param>
/// <param name="DataType">主关键字字段数据类型组成的数组</param>
/// <param name="pk">主关键字字段组成的数组</param>
/// <param name="SqlCmd">SqlCommand对象</param>
/// <returns>布尔型返回值,成功执行返回true,发生错误返回false</returns>
/// **************************************************************************
public static bool Reflection(string ClassName, string MethodName, string[] DataTypes, object[] pk, SqlCommand SqlCmd)
{
//删除SqlCommand对象的所有参数
SqlCmd.Parameters.Clear();
try
{
Assembly[] asm = AppDomain.CurrentDomain.GetAssemblies();
Type t=null;
int i=0;
do
{
t = asm[i].GetType(ClassName);
i++;
} while (t == null && i<asm.Length);
object obj = Activator.CreateInstance(t);
//将传入的数据类型字符串转化为数据类型数组
Type[] types = ConvertDataType(SqlCmd, DataTypes);
//根据方法名和数据类型数组获取方法
MethodInfo m = t.GetMethod(MethodName,types);
//根据数据类型转化数据
object[] aryObj = ConvertData(SqlCmd, DataTypes, pk);
//如果转化成功则调用查找到的方法执行
if (aryObj == null)
{
LogService.Write("public static bool reflection(string ClassName, string MethodName, string[] DataType, object[] pk)");
LogService.Write("对主关键字进行特定数据类型转换的操作不成功。");
return false;
}
else
{
object result = m.Invoke(obj,aryObj);
return (bool)result;
}
}
catch(Exception e)
{
LogService.Write("public static bool Reflection(string ClassName, string MethodName, string[] DataTypes, object[] pk)");
LogService.Write("反射函数执行失败。ClassName:" + ClassName + "; MethodName:" + MethodName);
LogService.Write(e.Message);
return false;
}
}
/// **************************************************************************
/// END
/// **************************************************************************
/// **************************************************************************
/// BEIGIN
/// <summary>
/// 将对象数组按照给定的数据类型进行转换(三期新版本)
/// </summary>
/// <param name="SqlCmd">SqlCommand对象</param>
/// <param name="DataType">对象数组对应的数据类型数组</param>
/// <param name="pk">主关键字字段组成的数组</param>
/// <returns>返回转化后的对象数组</returns>
/// **************************************************************************
public static object[] ConvertData(SqlCommand SqlCmd, string[] DataType, object[] pk)
{
try
{
object[] obj = new object[DataType.Length + 1];
obj[0] = SqlCmd;
for(int i=0; i<DataType.Length; i++)
{
if (DataType[i].ToLower() == "int") //整型
{
obj[i+1] = int.Parse(pk[i].ToString());
}
else if(DataType[i].ToLower() == "double") //双精度浮点型
{
obj[i+1] = double.Parse(pk[i].ToString());
}
else if(DataType[i].ToLower() == "datetime") //日期型
{
obj[i+1] = System.DateTime.Parse(pk[i].ToString());
}
else if(DataType[i].ToLower() == "float") //单精度浮点型
{
obj[i+1] = float.Parse(pk[i].ToString());
}
else if(DataType[i].ToLower() == "decimal") //十进制小数型
{
obj[i+1] = decimal.Parse(pk[i].ToString());
}
else if(DataType[i].ToLower() == "long") //长整型
{
obj[i+1] = long.Parse(pk[i].ToString());
}
else if(DataType[i].ToLower() == "short") //短整型
{
obj[i+1] = short.Parse(pk[i].ToString());
}
else if(DataType[i].ToLower() == "bool") //布尔型
{
obj[i+1] = bool.Parse(pk[i].ToString());
}
else //不处理
{
obj[i+1] = pk[i].ToString();
}
}
return obj;
}
catch(Exception e)
{
LogService.Write("public static void ConvertDataType(SqlConnection SqlCmd, string[] DataType, object[] pk)");
LogService.Write(e.Message);
return null;
}
}
/// **************************************************************************
/// END
/// **************************************************************************
/// **************************************************************************
/// BEIGIN
/// <summary>
/// 将数据类型名称数组转化为数据类型数组(三期新版本)
/// </summary>
/// <param name="SqlCmd">SqlCommand对象</param>
/// <param name="DataTypes">数据类型名称数组</param>
/// <returns></returns>
/// **************************************************************************
public static Type[] ConvertDataType(SqlCommand SqlCmd, string[] DataTypes)
{
try
{
Type[] types = new Type[DataTypes.Length + 1];
types[0] = typeof(SqlCommand);
for(int i=0; i<DataTypes.Length; i++)
{
if(DataTypes[i]=="int")
{
types[i+1] = typeof(int);
}
else if(DataTypes[i]=="string")
{
types[i+1] = typeof(string);
}
else if(DataTypes[i]=="float")
{
types[i+1] = typeof(float);
}
else if(DataTypes[i]=="long")
{
types[i+1] = typeof(long);
}
else if(DataTypes[i]=="short")
{
types[i+1] = typeof(short);
}
else if(DataTypes[i]=="bool")
{
types[i+1] = typeof(bool);
}
else if(DataTypes[i]=="decimal")
{
types[i+1] = typeof(decimal);
}
else if(DataTypes[i]=="double")
{
types[i+1] = typeof(double);
}
else if(DataTypes[i]=="DateTime")
{
types[i+1] = typeof(DateTime);
}
else
{
return null;
}
}
return types;
}
catch(Exception e)
{
LogService.Write("public static Type[] ConvertDataType(SqlCommand SqlCmd, string[] DataTypes)");
LogService.Write(e.Message);
return null;
}
}
/// **************************************************************************
/// END
/// **************************************************************************
//---------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------
//以下是对子窗口的处理方法集
//---------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------
/// **************************************************************************
/// BEIGIN
/// <summary>
/// 通过父页面的URL获得主关键字
/// </summary>
/// <param name="thePage">调用此方法的Web页面对象</param>
/// <returns>主关键字数组</returns>
/// **************************************************************************
public static string[] GetPks(System.Web.UI.Page thePage)
{
//获得父页面的完整URL并通过“|”进行分解
string[] pks = thePage.Request.QueryString["ParentURL"].Split('|');
//将分解后的字符串进行处理,获得主关键字数组
for (int i=0; i<pks.Length; i++)
{
pks[i] = pks[i].Substring(pks[i].LastIndexOf("=") + 1);
}
return pks;
}
/// **************************************************************************
/// END
/// **************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -