2015-01-02 3 views
1

onClick에 새 행을 추가하려고합니다. 그러나, 그것은 기존 행을 새로운 행에 추가하는 순간을 대체했습니다.C# 기존 데이터 테이블에 새 행 추가 문제

는 여기에 코드입니다 :

Main.cs

protected void Button1_Click(object sender, EventArgs e) 
{ 
    DateTime selectedDate = CalendarMain.SelectedDate; 
    string SportType = ddlSportType.SelectedItem.ToString(); 
    string distance = ddlDistance.SelectedItem.ToString(); 

    plan wp = new plan(); 
    wp.Time_Start = selectedDate; 
    wp.Duration = distance; 
    wp.Activity = SportType; 

    DataTable dt = wp.addPlanDetailDataRow(); 

    gvActivityList.DataSource = dt; 
    gvActivityList.DataBind(); 
} 

plan.cs

public DataTable addPlanDetailDataRow() 
{ 
    DataTable dt = new DataTable(); 

    dt.Columns.Add("Activity"); 
    dt.Columns.Add("Duration"); 
    dt.Columns.Add("status"); 
    dt.Columns.Add("Time_Start"); 
    dt.Columns.Add("Plan_ID"); 

    DataRow newRow = dt.NewRow(); 

    dt.Rows.Add(newRow); 

    return dt; 
} 

내가 놓친 것을 확실하지 않다. 제 실수에 대해 안내해주십시오. 고마워요

+2

당신은'DataTable' 때마다 다시 생성하는, 따라서 당신은 현재 행을 볼 수 있습니다. –

+0

안녕하세요, 저는이 번 주에있는 테이블을 만드는 시도하고에 전달 "addPlanDetailDataRow (DT)를"그러나 어떻게 든 –

답변

3

사용 ViewState를 이전 값을 기억 :

편집 : - 나는 샘플 페이지를 시도하고 그 작업은 아래의 코드를 볼

protected void Button1_Click(object sender, EventArgs e) 
{ 
    DateTime selectedDate = CalendarMain.SelectedDate; 
    string SportType = ddlSportType.SelectedItem.ToString(); 
    string distance = ddlDistance.SelectedItem.ToString(); 
    plan wp = new plan(); 
    wp.Time_Start = selectedDate; 
    wp.Duration = distance; 
    wp.Activity = SportType; 

    DataTable dt = new DataTable(); 

    dt.Columns.Add("Activity"); 
    dt.Columns.Add("Duration"); 
    dt.Columns.Add("status"); 
    dt.Columns.Add("Time_Start"); 
    dt.Columns.Add("Plan_ID"); 


    DataTable dt1 = wp.addPlanDetailDataRow(dt); 

    gvActivityList.DataSource = dt; 
    gvActivityList.DataBind(); 
} 
public DataTable addPlanDetailDataRow(DataTable dt) 
{ 

    if (ViewState["Datatable"] != null) 
    { 
     dt = (DataTable)ViewState["Datatable"]; 
    } 
    ViewState["Datatable"] = dt; 
    DataRow dr = dt.NewRow(); 
    dr["Activity"]="value1"; 
    dr["Duration"]="value2"; 
    dr["status"]="value3"; 
    dr["Time_Start"]="value4"; 
    dr["Plan_ID"]="value5"; 

    dt.Rows.Add(dr); 

    return dt; 
} 
+0

도움 주셔서 감사합니다. =) –

+0

환영합니다 :) – Tejas

4

DataTable은 로컬로 addPlanDetailDataRow에 정의되어 있습니다. 이전 범위를 유지하려면 클래스 범위에 instanstiated을 한 번 정의해야합니다. 한 번 호출되도록 일부 메서드에서 datatable의 열을 추가하는 데 사용하십시오. DataTable에로 편집

DataTable dt = new DataTable(); 
private InitDataTable() //This method should be called once 
{ 
    dt.Columns.Add("Activity"); 
    dt.Columns.Add("Duration"); 
    dt.Columns.Add("status"); 
    dt.Columns.Add("Time_Start"); 
    dt.Columns.Add("Plan_ID");  
} 
public DataTable addPlanDetailDataRow() 
{  
    DataRow newRow = dt.NewRow();  
    dt.Rows.Add(newRow);  
    return dt; 
} 

는 데이터 멤버로 선언하고 데이터 테이블을 돌려 줄 필요가없는 클래스의 모든 메소드에 액세스 할 수 있습니다. 아래 그림과 같이 addPlanDetailDataRow가 변경됩니다. 또한 행을 추가하고 있지만 행을 채우지는 않는다는 점에 유의하십시오. 데이터 바인딩은 asp.net에서 사용하면 데이터베이스의 ViewState 또는 데이터의 DataTable에 넣어해야 할 수도 있습니다으로 방법의

public void addPlanDetailDataRow() 
    DataRow newRow = dt.NewRow(); 
    newRow["Activity"] = "a1"; //These dummy values should be replaced by real values. 
    newRow["Duration"] = "d1"; 
    newRow["status"] = "s1"; 
    newRow["Time_Start"] = "st1"; 
    newRow["Plan_ID"] = "p1"; 
    dt.Rows.Add(newRow); 
} 

콜링은

gvActivityList.DataSource = addPlanDetailDataRow(); 
gvActivityList.DataBind(); 

될 것이다.

+0

@JLRishe 감사를 작동하지 않습니다, 나는이 아래를 Page_Load 동안 InitDataTable()를 호출 시도 if (!ispostback) 하지만 작동하지 않습니다. – Adil

+0

안녕을 가리키는 위해 –

+0

도움 주셔서 감사합니다.) –

1

.

// 지속 데이터 다시 게시 viewstate가에있는 데이터 테이블을 넣어 시도하고 추적을 가능하게하여,

// viewstate가 크기보고 후. 너무 크지 않고 1MB 미만인 경우 Viewstate,

//을 사용하는 것이 더 효율적이며 서버 리소스를 사용하지 않습니다.

Main.cs

protected void btn1_Click(object sender, EventArgs e) 
{ 
    DateTime selectedDate = DateTime.Now; 
    string SportType = "Dummy SportType"; 
    string distance = "Dymmy distance"; 
    plan wp = new plan(); 
    wp.Time_Start = selectedDate; 
    wp.Duration = distance; 
    wp.Activity = SportType; 
    DataTable dt; 
    if (ViewState["Datatable"] != null) // 
    { 
     wp.dt = (DataTable)ViewState["Datatable"]; 
    } 
    else 
    { 
     wp.InitDataTable(); 
    }   
    dt = wp.addPlanDetailDataRow(); 
    ViewState["Datatable"] = dt; 
    gvActivityList.DataSource = dt; 
    gvActivityList.DataBind(); 

} 

plan.cs

public plan() 
{ 
    // 
    // TODO: Add constructor logic here 
    // 

} 
public DataTable dt; 
public void InitDataTable() 
{ 
    dt = new DataTable(); 
    dt.Columns.Add("Activity"); 
    dt.Columns.Add("Duration"); 
    dt.Columns.Add("status"); 
    dt.Columns.Add("Time_Start"); 
    dt.Columns.Add("Plan_ID"); 
} 
public DateTime Time_Start; 
public string Duration; 
public string Activity; 

public DataTable addPlanDetailDataRow() 
{ 
    DataRow newRow = dt.NewRow(); 
    newRow["Activity"] = this.Activity; 
    newRow["Duration"] = this.Duration; 
    newRow["status"] = "s1"; 
    newRow["Time_Start"] = this.Time_Start; 
    newRow["Plan_ID"] = "p1"; 
    dt.Rows.Add(newRow); 

    return dt; 
} 
관련 문제