2011-09-22 75 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,然后你会能够访问它在功能