C# DataTable의 일반적인 사용 방법 설명

8522 단어 Datatable
프로젝트에서 DataTable를 자주 사용하는데 만약에 DataTable를 적절하게 사용하면 프로그램을 간결하고 실용적으로 사용할 수 있을 뿐만 아니라 성능을 향상시키고 적은 노력으로 큰 효과를 거둘 수 있다. 이제 DataTable의 사용 기교를 총괄해 보자.
1. DataTable 소개
(1) 구조 함수 DataTable()는 파라미터가 없는 DataTable 클래스의 새로운 인스턴스를 초기화합니다.DataTable (string tableName) 은 지정한 테이블 이름으로 DataTable 클래스의 새로운 예를 초기화합니다.DataTable (string tableName,string tableNamespace) 은 지정한 테이블 이름과 이름 공간으로 DataTable 클래스의 새로운 예를 초기화합니다.(2) 일반 속성 CaseSensitive 표시기의 문자열 비교는 대소문자를 구분하는지 여부를 나타냅니다.ChildRelations는 이 DataTable의 하위 관계 집합을 가져옵니다.Columns는 이 테이블에 속하는 열의 집합을 가져옵니다.Constraints는 이 테이블에서 유지하는 제약의 집합을 가져옵니다.DataSet 이 테이블이 속한 DataSet을 가져옵니다.DefaultView는 필터 뷰나 커서 위치를 포함하는 테이블의 사용자 정의 뷰를 가져옵니다.HasErrors는 테이블이 속한 DataSet의 모든 행에 오류가 있는지 여부를 나타내는 값을 가져옵니다.MinimumCapacity에서 테이블의 초기 시작 크기를 가져오거나 설정합니다.이 표의 줄의 초기 시작 크기입니다.기본값은 50입니다.Rows는 이 테이블에 속하는 줄의 집합을 가져옵니다.TableName에서 DataTable의 이름을 가져오거나 설정합니다.
(3) 일반적인 방법인 AcceptChanges()는 AcceptChanges()를 마지막으로 호출한 이후 테이블에 적용된 모든 변경 사항을 커밋합니다.BeginInit()가 창에서 사용하거나 다른 구성 요소에서 사용하는 DataTable를 초기화하기 시작합니다.초기화는 실행할 때 발생합니다.
Clear() 모든 데이터의 DataTable를 지웁니다.Clone() 모든 DataTable 아키텍처와 구속을 포함하여 DataTable 구조를 클론합니다.EndInit () 는 창에서 사용하거나 다른 구성 요소에서 사용하는 DataTable 초기화를 끝냅니다.초기화는 실행할 때 발생합니다.ImportRow(DataRow row)는 DataRow를 DataTable에 복사하여 속성 설정과 초기 값 및 현재 값을 유지합니다.Merge(DataTable table)는 지정된 DataTable를 현재 DataTable과 결합합니다.NewRow()는 테이블과 동일한 아키텍처를 가진 새 DataRow를 만듭니다.2. DataTable 사용 방법
(1)Create a DataTable        
DataTable dt = new DataTable("Table_AX");

(2)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); 

(3)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);

 
(4)Select row        
//Search the second row       ,  is null select

         DataRow[] drs = dt.Select("column1 is null");

         DataRow[] drss = dt.Select("column0 = 'AX'");

(5)Copy DataTable include data        
DataTable dtNew = dt.Copy();

(6)Copy DataTable only scheme         
DataTable dtOnlyScheme = dt.Clone();

 (7)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;

 
(8)Evaluate another DataTable's row to current Datatable        
dtOnlyScheme.Rows.Add(dt.Rows[0].ItemArray);

(9)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();

(10)Filter DataTable        
dt.DefaultView.RowFilter = "column1 <> true";

         dt.DefaultView.RowFilter = "column1 = true";

(11)Sort row         
dt.DefaultView.Sort = "ID ,Name ASC";

          dt=dt.DefaultView.ToTable();

(12)Bind DataTable          
//      DefaultView

          gvTestDataTable.DataSource = dt;

          gvTestDataTable.DataBind();

(13)judge the DataTable’s Column name is a string         
//          DataTable   

         dtInfo.Columns.Contains("AX");

(14)DataTable convert to XML and XML convert to DataTable
 
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;

        }

 
 
(15) DataTable에서 조회를 실행하여 DataTable로 되돌아오기;
방법 1:
// <summary>

//   DataTable        DataTable

// </summary>

// dt     DataTable

// condition      



DataTable newdt = new DataTable();

newdt = dt.Clone(); //   dt    ,     dt      ,    ;

DataRow[] rows = dt.Select(conditions); //  dt           ;

foreach (DataRow row in rows)  //          dt ;

{

       newdt.Rows.Add(row.ItemArray);

}

 
방법2:
DataTable newdt = new DataTable();

newdt=dt.Clone();

DataRow[] dr = dt.Select(condition);

for(int i=0;i<dr.Length;i++)

{

newdt.ImportRow((DataRow)dr[i]);

}

 
방법 3:
DataTable newdt = new DataTable();



dt.DefaultView.RowFilter = "conditions";



newdt =dt.DefaultView.ToTable();

(16) DataTable에서 행을 제거합니다.
DataTable에서 행을 삭제하는 세 가지 방법: (DataTable.Rows.Remove(DataRow dr), DataTable.Rows.RemoveAt(i)、DataRow.Delete())
DataTable의 줄을 삭제하려면 색인 문제에 주의해야 한다. 일반적으로 두 가지 방법이 있다. 1] for로 순환할 때 계수기의 초기 값은 표 길이이고 순환을 줄이는 것이다.DataTable.Rows.RemoveAt(i)는 주의해야 합니다.2] DataTable의 Select 방법으로 이 방법의 매개 변수는 문자열 필터 3] Delete () 다음에 데이터테이블이 필요합니다.Delete ()는 해당 열의 상태를 삭제로 표시하고 데이터테이블을 통해 삭제할 수 있기 때문에 AccepteChanges () 방법은 완전한 삭제를 확인합니다.RejectChanges()가 롤백되어 행이 제거됩니다.여러 줄을 삭제하려면 Delete()를 연속으로 사용하고 AccepteChanges() 방법으로 삭제를 확인할 수 있습니다.

좋은 웹페이지 즐겨찾기