1.table的主要操作及應用:
1.1.table的讀取:
1.1.1. DataSet dsHui = flow.GetSpecialSign(processId);
if (dsHui != null&dsHui.Tables[0].Rows.Count > 0)
{
for (int i = 0; i < dsHui.Tables[0].Rows.Count; i++)
{
arruser += dsHui.Tables[0].Rows[i]["user_name"].ToString() + ",";
if (dsHui.Tables[0].Rows[i]["user_name"].ToString().Equals(userName))
{
btnConfirm.Visible = false;
}
}
ViewState["SpecialUsers"] = arruser;
}
也可以用:DataRowCollection
DataRowCollection processes = ds.Tables[0].Rows;
string processId = processes[Convert.ToInt32(procNo) - 1]["ProcessId"].ToString();
1.1.2. DataTable dtDiscussionListInfo = dsDiscussionListInfo.Tables[0];
dtDiscussionListInfo.Columns.Add("SN"); //添加新列
for (int i = 0; i < dtDiscussionListInfo.Rows.Count; i++)
{
dtDiscussionListInfo.Rows[i]["SN"] = (i + 1).ToString(); //給新列附值
}
1.2.3.DataTable tmp = new DataTable();
tmp.Columns.Add(new DataColumn( "Corporation",typeof(string))); //新建行
3.SqlDataReader的主要操作及應用:
3.1
if (rdr.Read())
{
apaFile = new ApaFileInfo(rdr.GetGuid(0), rdr[1].ToString(), rdr[2].ToString())
}//rdr[1]是代表當前行的第二列.也可以是rdr["列名"]來讀取.
4.1合并表(相同相同列的兩表合并):
4.1.1(通過DataView的方法):
DataTable dt1,dt2,dtTest1,dtTest2;
DataView dv1=dt1.DefaultView;//視圖
DataView dv2=dt2.DefaultView;
dv1.Sort="列名";//按列名將視圖排序
dv2.Sort="列名";
dtTest1=dv1.ToTable();//將視圖轉成表
dtTest2=dv2.ToTable();
dtTest1.Merge(dtTest2);//將兩將表合并
4.1.2 表過濾
/// <summary>
/// 將查詢結果過濾方法
/// </summary>
/// <param name="expression">過濾字符</param>
private DataTable QueryExpression(string expression, DataTable dtCases, string sort)
{
DataTable dtResult = dtCases.Clone();
DataRow[] d = dtCases.Select(expression, sort);
foreach (DataRow dr in d)
{
dtResult.Rows.Add(dr.ItemArray);
}
return dtResult;
}
5.1 datatable.select用法:(表過濾行)
DataRow[] d = dt.Select(expression, sort);
//string expression = "row_number <=" + iShowCount.ToString();
//string sort="列名 asc/desc";
5.2 DataTable dt1 = dt2.Clone();//複製dt1的表結構,其實dt1里面只有表結構而沒有數據;
6.1 轉換表(即增加多減少表的列數操作對象一個表,):將TaskListDataTable表的列減少為兩個指定列的dtSessionTable表
DataTable TaskListDataTable;
DataTable dtSessionTable = new DataTable();
dtSessionTable.BeginInit();
dtSessionTable.Columns.Add("case_id");
dtSessionTable.Columns.Add("process_id");
dtSessionTable.EndInit();
DataRow dtSessionRow;
if (TaskListDataTable != null && TaskListDataTable.Rows.Count > 0)
{
foreach (DataRow drow in TaskListDataTable.Rows)
{
if (!string.IsNullOrEmpty(drow["case_id"].ToString()))
{
dtSessionRow = dtSessionTable.NewRow();
dtSessionRow[0] = drow["case_id"].ToString();
dtSessionRow[1] = drow["process_id"].ToString();
dtSessionTable.Rows.Add(dtSessionRow);
}
}
}
6.2轉換表:(對象是兩個表,將一個表的某幾列合并到另一個表上)
將dsTemp表中的兩個列加到dtResult表上
dtResult.Columns.Add("urgency_degree");
dtResult.Columns.Add("amount");
if (dsTemp != null && dsTemp.Tables[0].Rows.Count == dtResult.Rows.Count)
{
for (int i = 0; i < dtResult.Rows.Count; i++)
{
for (int j = 0; j < dsTemp.Tables[0].Rows.Count; j++)
{
if (dtResult.Rows[i]["case_id"].ToString().Trim() == dsTemp.Tables[0].Rows[j]["case_id"].ToString().Trim())
{
dtResult.Rows[i]["urgency_degree"] = dsTemp.Tables[0].Rows[j]["urgency_degree"].ToString().Trim();
dtResult.Rows[i]["supplier"] = dsTemp.Tables[0].Rows[j]["supplier"].ToString().Trim();
dtResult.Rows[i]["amount"] = dsTemp.Tables[0].Rows[j]["amount"].ToString().Trim();
break;
}
}
}
}
6.3 RowFilter取得或設定用來篩選 DataView 中檢視的資料列的運算式。
DataView dv = ds.Tables[0].DefaultView;
dv.RowFilter = "(ProcessName = '會計確認' or ProcessName = '財務經辦' or FlowOrder = 1) and FinishDate is not null";
7.分頁
DataTable dt = dtResult.Clone();
DataRow dr;
for (int i = 0; i < ItemCount; i++)
{
dr = dt.NewRow();
if (i < PageCurrent * PageSize && i >= (PageCurrent - 1) * PageSize)
{
for (int j = 0; j < dt.Columns.Count; j++)
{
try
{
dr[j] = dtResult.Rows[i - (PageCurrent - 1) * PageSize][j];
}
catch (Exception ex)
{
string s = ex.Message;
return dt;
}
}
}
dt.Rows.Add(dr);
}