이미 데이터가 포함 된 데이터 테이블에 새 열과 데이터를 추가하려면 어떻게해야합니까?


81

이미 데이터가 포함 DataColumnDataTable개체에 새 항목 을 추가하려면 어떻게합니까 ?

의사 코드

//call SQL helper class to get initial data 
DataTable dt = sql.ExecuteDataTable("sp_MyProc");

dt.Columns.Add("NewColumn", type(System.Int32));

foreach(DataRow row in dr.Rows)
{
    //need to set value to NewColumn column
}

답변:


126

코드를 계속 사용하십시오. 올바른 방향으로 가고 있습니다.

//call SQL helper class to get initial data 
DataTable dt = sql.ExecuteDataTable("sp_MyProc");

dt.Columns.Add("NewColumn", typeof(System.Int32));

foreach(DataRow row in dt.Rows)
{
    //need to set value to NewColumn column
    row["NewColumn"] = 0;   // or set it to some other value
}

// possibly save your Dataset here, after setting all the new values

dt.AcceptChanges()새 열과 값을 추가 한 후 전화를해야 했습니까 ?
Michael Kniskern

2
@Michael : 아뇨, 아닙니다. 이제 데이터 세트에 이러한 새 값이 준비됩니다. 저장하려면 SqlDataAdapter 또는 다른 방법을 통해 다시 쓸 수있는 방법이 있어야합니다. AcceptChanges ()는 아무 작업도하지 않습니다 (변경 사항을 "수락 됨"으로 표시하는 경우 제외-> 다음에 데이터를 저장할 때 감지되지 않습니다!)
marc_s

13

foreach대신에 안돼 !?

//call SQL helper class to get initial data  
DataTable dt = sql.ExecuteDataTable("sp_MyProc"); 

dt.Columns.Add("MyRow", **typeof**(System.Int32)); 

foreach(DataRow dr in dt.Rows) 
{ 
    //need to set value to MyRow column 
    dr["MyRow"] = 0;   // or set it to some other value 
} 

7

For / ForEach 루핑을 줄이는 대체 솔루션이 있습니다. 이렇게하면 루핑 시간이 줄어들고 빠르게 업데이트됩니다. :)

 dt.Columns.Add("MyRow", typeof(System.Int32));
 dt.Columns["MyRow"].Expression = "'0'";

2
@Akxaya, 그 솔루션이 어떻게 작동하는지 자세히 설명해 주시겠습니까?
Mikael Dúi Bolinder

DataTable dt = sql.ExecuteDataTable ( "sp_MyProc"); // dt.Columns.Add ( "MyRow", typeof (System.Int32)); dt.Columns [ "MyRow"]. Expression = " '0'";
Akxaya

6

기본값 매개 변수를 설정하고자합니다. 이 호출 세 번째 오버로딩 메서드입니다.

dt.Columns.Add("MyRow", type(System.Int32),0);

2

이 시도

> dt.columns.Add("ColumnName", typeof(Give the type you want));
> dt.Rows[give the row no like  or  or any no]["Column name in which you want to add data"] = Value;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.