2011-09-22 76 views
0

我有一個名爲BindItems()的方法,並且此方法將值傳遞給DataTable,然後綁定GridView。選擇項目模板中的選定值

然後我在該gridview中包含一個下拉菜單,這個下拉菜單從代碼背後的GridView_RowDataBound中填充1到14,現在我需要設計一個方法來獲取DataTable上的Quantity值其他函數「BindItems()」,並在gridview中的每一行,所以一個SelectedValue = datatable [「數量」]什麼的..我該怎麼做?

protected void BinItems(int myId) 
{ 
    //this data table contains a value "Quantity" 
    DataTable dt = MyClass.getItems(myId); 


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

protected void Gridview1_RowDataBound(Object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType.Equals(DataControlRowType.DataRow)) 
    { 
     DropDownList Myddl = e.Row.FindControl("MyQuantity") as DropDownList; 

     if (Myddl != null) 
     { 
      for (int i = 1; i < 15; i++) 
      { 
       Myddl.Items.Add(i.ToString()); 
      } 
     } 
    } 

//Some how i need to do a SelectedValue = datatable where field = Quantity for each row 
} 
+0

我不記得確切,但你不能讓你被綁定到EventArgs的項目嗎?你可以將它轉換成DataRow?或者甚至可能被存儲爲鍵/值字典?我只是不記得確切。 –

+0

@KyleRogers我會刷新你的記憶:)你需要訪問'e.Row.DataItem',看到我的回答如下 –

+0

@Adrian謝謝。我試圖儘可能遠離webforms。 –

回答

1

你需要訪問當前的幸福結合行的DataItem,而你的情況,是DataRowView (因爲你被綁定到DataTable):

protected void Gridview1_RowDataBound(Object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType.Equals(DataControlRowType.DataRow)) 
    { 
     DropDownList Myddl = e.Row.FindControl("MyQuantity") as DropDownList; 

     if (Myddl != null) 
     { 
      for (int i = 1; i < 15; i++) 
      { 
       Myddl.Items.Add(i.ToString()); 
      } 
     } 
    } 

    //here goes the "magic" 
    DataRowView dRow = e.Row.DataItem as DataRowView; 
    if(dRow != null) 
    { 
     Myddl.SelectedValue = dRow["Quantity"].ToString(); 
    } 
} 
+0

我如何添加一個隱藏的itemtemplate像一個隱藏的變量或在gridview中的東西,並將QUANTity值存儲在那裏..因爲它沒有找到它:(。 – edcod81

+0

我改變了DataRow到DataRowView,它爲我工作。 – Decker97

+0

是完美!對我也有效 – edcod81

0

你應該之外的數據表DT,然後你會能夠訪問它在功能