[C#]DataTable常用操作总结【转】
【引言】项目中经常使用DataTable,发现有好多东西,需要整理下.
protected void Page_Load(object sender, EventArgs e) {
//①Create a DataTable
DataTable dt = new DataTable(\"Table_AX\");
//②Add columns for DataTable //Method 1
dt.Columns.Add(\"column0\ //Method 2
DataColumn dc = new DataColumn(\"column1\ dt.Columns.Add(dc);
//③Add rows for DataTable //★Initialize the row
DataRow dr = dt.NewRow(); dr[\"column0\"] = \"AX\"; dr[\"column1\"] = true; dt.Rows.Add(dr);
//★Doesn't initialize the row DataRow dr1 = dt.NewRow(); dt.Rows.Add(dr1);
//④Select row
//Search the second row 如果没有赋值,则用is null来select DataRow[] drs = dt.Select(\"column1 is null\"); DataRow[] drss = dt.Select(\"column0 = 'AX'\");
//⑤Copy DataTable include data DataTable dtNew = dt.Copy();
//⑥Copy DataTable only scheme DataTable dtOnlyScheme = dt.Clone();
//⑦Operate one row //★都是对dt的操作 //Method 1
DataRow drOperate = dt.Rows[0]; drOperate[\"column0\"] = \"AXzhz\"; drOperate[\"column1\"] = false; //Method 2
drOperate[0] = \"AXzhz\"; drOperate[1] = false; //Method 3
dt.Rows[0][\"column0\"] = \"AXzhz\"; dt.Rows[0][\"column1\"] = false; //Method 4
dt.Rows[0][0] = \"AXzhz\"; dt.Rows[0][1] = false;
//⑧Evaluate another DataTable's row to current Datatable dtOnlyScheme.Rows.Add(dt.Rows[0].ItemArray);
//⑨Use Rowstate
//■■■■■■■■■■■■■■■■■■■■■■■■■■■■
//不知道怎么才能使Row的State变为DataRowState.Deleted //More further,怎样设置Row的State //■■■■■■■■■■■■■■■■■■■■■■■■■■■■
if (dt.Rows[0].RowState == DataRowState.Unchanged) {
//Your logic }
//⑩Convert to string
System.IO.StringWriter sw = new System.IO.StringWriter();
System.Xml.XmlTextWriter xw = new System.Xml.XmlTextWriter(sw); dt.WriteXml(xw); string s = sw.ToString();
//ⅰ.string convert to DataTable【Doesn't achieve it】 //■■■■■■■■■■■■■■■■■■■■■■■■■■■■
//没有把string成功转换为DataTable ■■已实现,参见追加■■ //■■■■■■■■■■■■■■■■■■■■■■■■■■■■ //DataTable dtConvert = new DataTable();
//System.IO.StringReader stream = new System.IO.StringReader(s); //System.Xml.XmlReader xtr = new System.Xml.XmlTextReader(stream); //dtConvert.ReadXml(xtr);
//ⅱ.Filter DataTable
//It's so strange that the second row has been filtered //the second row show in GridView never //It means null field will be filter always. //Filter the all conditions
dt.DefaultView.RowFilter = \"column1 <> true\"; //dt.DefaultView.RowFilter = \"column1 = true\";
dt.DefaultView.RowStateFilter = DataViewRowState.Added;
//ⅲ.Sort row //Stupid method
DataRow[] drsss = dt.Select(String.Empty, \"column0 DESC , column1 ASC\"); //Clever method
dt.DefaultView.Sort = \"column0 , column1 ASC\";
//ⅳ.Bind DataTable //绑定的其实是DefaultView
gvTestDataTable.DataSource = dt; gvTestDataTable.DataBind(); }
【追加】判断一个字符串是否为DataTable的列名 dtInfo.Columns.Contains(\"AX\");
【追加】DataTable与XML的转换
protected void Page_Load(object sender, EventArgs e) {
DataTable dt_AX = new DataTable();
//dt_AX.Columns.Add(\"Sex\ //DataRow dr = dt_AX.NewRow(); //dr[\"Sex\"] = true; //dt_AX.Rows.Add(dr);
string xml=ConvertBetweenDataTableAndXML_AX(dt_AX); DataTable dt = ConvertBetweenDataTableAndXML_AX(xml); }
public string ConvertBetweenDataTableAndXML_AX(DataTable dtNeedCoveret) {
System.IO.TextWriter tw = new System.IO.StringWriter(); //if TableName is empty, WriteXml() will throw Exception.
dtNeedCoveret.TableName=dtNeedCoveret.TableName.Length==0?\"Table_AX\":dtNeedCoveret.TableName;
dtNeedCoveret.WriteXml(tw);
dtNeedCoveret.WriteXmlSchema(tw); return tw.ToString(); }
public DataTable ConvertBetweenDataTableAndXML_AX(string xml)
{
System.IO.TextReader trDataTable = new System.IO.StringReader(xml.Substring(0, xml.IndexOf(\"System.IO.TextReader trSchema = new System.IO.StringReader(xml.Substring(xml.IndexOf(\"DataTable dtReturn = new DataTable(); dtReturn.ReadXmlSchema(trSchema); dtReturn.ReadXml(trDataTable); return dtReturn; }
【追加】排序的好方法
dt.DefaultView.Sort = \"ID ,Name ASC\"; dt=dt.DefaultView.ToTable();
因篇幅问题不能全部显示,请点此查看更多更全内容