[C#]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", System.Type.GetType("System.String"));
        
//Method 2
        DataColumn dc = new DataColumn("column1", System.Type.GetType("System.Boolean"));
        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", typeof(System.Boolean));
            
//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("<?xml")));
            System.IO.TextReader trSchema 
= new System.IO.StringReader(xml.Substring(xml.IndexOf("<?xml")));
            DataTable dtReturn 
= new DataTable();
            dtReturn.ReadXmlSchema(trSchema);
            dtReturn.ReadXml(trDataTable);
            
return dtReturn;
        }
【追加】排序的好方法
            dt.DefaultView.Sort  =   " ID ,Name ASC " ;
            dt
= dt.DefaultView.ToTable();
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C# DataTable 操作上移和下移可以通过以下步骤实现: 1. 获取当前选中行的索引值。 2. 判断是上移还是下移操作。 3. 如果是上移操作,将当前行和上一行的数据交换。 4. 如果是下移操作,将当前行和下一行的数据交换。 5. 更新 DataTable 的数据源。 以下是示例代码: ``` // 获取当前选中行的索引值 int rowIndex = dataGridView1.CurrentCell.RowIndex; // 判断是上移还是下移操作 if (e.KeyCode == Keys.Up) { // 上移操作 if (rowIndex > ) { // 获取当前行和上一行的数据 DataRow currentRow = ((DataRowView)dataGridView1.Rows[rowIndex].DataBoundItem).Row; DataRow prevRow = ((DataRowView)dataGridView1.Rows[rowIndex - 1].DataBoundItem).Row; // 交换数据 object[] temp = currentRow.ItemArray; currentRow.ItemArray = prevRow.ItemArray; prevRow.ItemArray = temp; // 更新 DataTable 的数据源 DataTable dt = (DataTable)dataGridView1.DataSource; dt.AcceptChanges(); } } else if (e.KeyCode == Keys.Down) { // 下移操作 if (rowIndex < dataGridView1.Rows.Count - 1) { // 获取当前行和下一行的数据 DataRow currentRow = ((DataRowView)dataGridView1.Rows[rowIndex].DataBoundItem).Row; DataRow nextRow = ((DataRowView)dataGridView1.Rows[rowIndex + 1].DataBoundItem).Row; // 交换数据 object[] temp = currentRow.ItemArray; currentRow.ItemArray = nextRow.ItemArray; nextRow.ItemArray = temp; // 更新 DataTable 的数据源 DataTable dt = (DataTable)dataGridView1.DataSource; dt.AcceptChanges(); } } ``` ### 回答2: 抱歉,您没有明确提供问题或话题,无法为您提供准确详细的回答。请您再次提供具体的问题或话题,我会尽力帮助您! ### 回答3: 在计算机科学中,C语言是一种高级编程语言,它由贝尔实验室的Dennis Ritchie在20世纪70年代末发明。C语言的目标是为开发操作系统和编写和许多其他应用程序提供一个可移植、高效的工具。C语言具有许多使用和优点,其中一些包括: 1. 简单明了:C语言的语法和语义是简单的,容易理解和学习。此外,C语言没有太多的约束性,程序员可以自由地编写代码。 2. 低级别:C语言的低级别语法让程序员可以操纵内存,从而在效率上得到优化。C语言适合于编写一些对效率要求高的代码,例如操作系统和驱动程序。 3. 高度可移植性:C语言的编译器已经被移植到许多不同的计算机体系结构上。这意味着程序可以编写一次,在不同的计算机上运行。 4. 开放源代码:许多C语言编译器、库和工具是免费的,可以在不付出任何成本的情况下使用并改进。这使程序员可以在不牺牲质量的情况下提高效率。 C语言的应用非常广泛。它可以用于编写操作系统、设备驱动程序、游戏引擎、桌面应用程序、嵌入式系统等等。许多编程语言都借鉴了C语言的语法和结构,例如Java和C++。因此,C语言被认为是计算机科学的重要里程碑,对现代IT行业的发展有重要贡献。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值