公用代码实现两个表的拼接(部分代码)
来源:互联网 发布:超人软件破解下载 编辑:程序博客网 时间:2024/05/16 12:27
//上面的则是执行的时候需要用到的一些内容,但它不是公用的方法,所以只是看看里面的参数的传值问题,不用考虑太多的内容问题
/// <summary>
/// 获取需要加载的 拟 一级项目信息
/// </summary>
/// <returns></returns>
private DataSet GetDataTable(string ProjectId)
{
DataSet ds = new DataSet();
string conditionField = string.Empty;
string conditionSql = string.Empty;
//string ProjectId = this.hiProjectID.Value;
//如果显示本级信息
if (IsShowSelf)
{
conditionField = "BudgetProjectName";
}
else
{
conditionField = "ParentProjectName";
}
//为了避免存在相同名称的预算项目名称,以父级区分一下(但还存在问题 如果父级名称也一样,会查出多条数据)
if (!string.IsNullOrEmpty(ParentBudgetProjectName))
{
conditionSql += string.Format(" AND ParentProjectName='{0}'", ParentBudgetProjectName);
}
string sqlSelect = string.Format(@"DECLARE @FirstBudgetProjectEntityID nvarchar(36);
DECLARE @Count INT
SELECT @Count=COUNT(*) FROM BMIS_ProjectBudgetYearForm WHERE ProjectEntityId='{0}'
IF @Count>0
BEGIN
---查询项目对应的一级预算项目应该对应的执行ID(数据表中没有此数据)
SET @FirstBudgetProjectEntityID=(
SELECT TOP 1(FirstParentBudgetProjectExecuteEntityID) FROM table1 WHERE ProjectEntityId='{0}')
SELECT BudgetProjectExecuteEntityID FROM USV_ProjectBudgetExe WHERE {3} IN ({1}) AND ProjectLevel='{2}' AND FirstParentBudgetProjectExecuteEntityID=@FirstBudgetProjectEntityID {4}
SELECT @FirstBudgetProjectEntityID
SELECT *,ParentExeID AS ParentID,NULL AS MonthExeValue,NULL YExeValue,NULL YAllExeValue FROM USV_ProjectBudgetExe WHEREFirstParentBudgetProjectExecuteEntityID=@FirstBudgetProjectEntityID
----查询执行的月度信息
END
ELSE
BEGIN
SELECT TOP 0(BudgetProjectExecuteEntityID) FROM USV_ProjectBudgetExe
SELECT @FirstBudgetProjectEntityID
SELECT TOP 0*,NULL as ParentID,NULL AS MonthExeValue,NULL YExeValue,NULL YAllExeValue FROM USV_ProjectBudgetExe
END
", ProjectId, BudgetProjectName, ProjectLevel, conditionField, conditionSql);
try
{
PortalDB.LoadDataSet(CommandType.Text, sqlSelect, ds, new string[] { "ShowBudgetInfo", "FirstBudgetProjectEntity", "ExeData" });
}
catch (Exception ex)
{
PortalLogging.HandleException(ex);
ShowAlertMessage(ex.Message.ToString());
}
return ds;
}
//下面为公用的一些代码的内容
/// <summary>
/// 获取需要绑定的datatable dt1 dt2
/// </summary>
/// <param name="projectId"></param>
/// <returns></returns>
public DataTable GetBindDatatable(string ProjectId)
{
DataRow rowYear = InitYearInfo();
DataTable dt = new DataTable();
DataSet dsProjectInfo = GetDataTable(ProjectId);
string budgetExeID = string.Empty;
DataTable dtShowProjectInfo = dsProjectInfo.Tables["ShowBudgetInfo"];
DataTable dtFirst = dsProjectInfo.Tables["FirstBudgetProjectEntity"];
DataTable dtExeData = dsProjectInfo.Tables["ExeData"];
string parentExeID = string.Empty;
foreach (DataRow row in dtShowProjectInfo.Rows)
{
parentExeID += string.Format("'{0}',", row["BudgetProjectExecuteEntityID"].ToString());
budgetExeID += GetLowerBudgetInfoID(row["BudgetProjectExecuteEntityID"].ToString(), "'" + row["BudgetProjectExecuteEntityID"].ToString() + "',", dtExeData);
}
if (!string.IsNullOrEmpty(budgetExeID))
{
budgetExeID = budgetExeID.TrimEnd(',');
parentExeID = parentExeID.TrimEnd(',');
hiParentExeID.Value = parentExeID;
//由于查询的预算科目不一定是一级预算科目,即ParentExeID 有不为NULL的情况
//树 的一级的ParenExeID必须为NULL,手动将ParentExeID不为NULL的数据置为NULL
string sqlSelect = string.Format(@"
----项目预算信息
SELECT Temp.*,NULL AS Project2ExeValue,NULL AS Rate,
----本年执行数
ISNULL((SELECT SUM(ISNULL(MExeValue,0)) FROM table2 D WHERE D.BudgetProjectExecuteEntityID=Temp.BudgetProjectExecuteEntityID AND [Year]='{2}'),0) AS YExeValue
FROM (
SELECT *,NULL AS ParentID,ISNULL(Y,1) AS TotalValue FROM table3 WHERE BudgetProjectExecuteEntityID IN ({1})
UNION
SELECT *,ParentExeID AS ParentID,ISNULL(Y,1) AS TotalValue FROM table4 WHERE BudgetProjectExecuteEntityID IN ({0}) AND BudgetProjectExecuteEntityID NOT IN ({1})) Temp ORDER BY SortIndex
", budgetExeID, parentExeID, ddlYear.SelectedValue);
dt = PortalDB.ExecuteDataSet(CommandType.Text, sqlSelect).Tables[0];
hiFirstExeID.Value = dtFirst.Rows[0][0].ToString();
}
return dt;
}
//以下为绑定表1 dt1和表2 dt2
/// <summary>
/// 绑定项目费用科目信息
/// </summary>
public void ProjectDataBind()
{
//暂未用到
DataRow rowYear = InitYearInfo();
DataTable dt1 = GetBindDatatable(hiProjectID.Value);
DataTable dt2 = GetBindDatatable(hiProjectID1.Value);
//尤其是这里,里面的遍历的代码不太懂,所以应该仔细的看看
foreach (DataRow dr in dt1.Rows)
{
object budgetProjectName = dr["BudgetProjectName"];
DataRow[] selRows = dt2.Select(string.Format("BudgetProjectName='{0}'", budgetProjectName));
if (selRows.Length > 0)
{
dr["Project2ExeValue"] = selRows[0]["YExeValue"];
}
Decimal Project2Rate = Convert.ToDecimal(dr["YExeValue"]);
Decimal rate1 = Convert.ToDecimal(dr["Project2ExeValue"]);
object rate = dr["Rate"];
if (Project2Rate != 0)
{
rate = (rate1 - Project2Rate) / Project2Rate;
Convert.ToDecimal(rate);
}
else
{
}
dr["Rate"] = rate;
}
tgvProjectBudgetProject.UseDefaultDataSource = true;
tgvProjectBudgetProject.DataSource = dt1;
tgvProjectBudgetProject.PagingData();
}
- 公用代码实现两个表的拼接(部分代码)
- 通过DLL使两个工程公用部分代码
- 利用OpenCV实现图像拼接的代码!
- CET公用代码实现递归等
- 线性表(思想+伪代码+部分代码实现)
- Cocos2d-x简单游戏<植物大战僵尸>代码实现|第五部分:公用类<后续会提供源码下载链接>
- 使用JAVA代码实现字符串的简单拼接
- 代码和数据的拼接
- 公用代码放置位置
- pb基础公用代码
- ajax公用代码备份
- 代码_MFC_公用对话框
- 【代码】模板实现双向链表的去重、拼接、合并、排序
- 关于js处理的一些公用代码收集.(代码+demo)
- string.h中库函数的实现代码(部分)
- L-BFGS算法的JAVA实现,,部分代码!(修正)
- 实现聊天室的思路 和部分代码
- 剑指offer:合并两个排序的链表 代码实现
- CUDA: MFC中的联调CUDA方法实例
- Hibernate拉出的持久对象放入新集合中被修改,持久对象也变了
- R语言与机器学习中的回归方法学习笔记
- SDK Manager更新问题
- Deque与LinkedBlockingDeque深入分析 .
- 公用代码实现两个表的拼接(部分代码)
- cocos2d-x学习日志(13) --A星寻路算法demo
- basename dirname
- MyEclipse设置Jvm内存大小(即设置tomcat的内存配置大小)
- linux 修改句柄数
- linux内核奇遇记之md源代码解读之九阵列raid5同步函数sync_request
- plsql查询数据显示为乱码解决方法
- 写代码的一点小建议
- JS创建对象