如何在ASP.NET中的gridview中访问动态创建的控件的值

时间:2012-05-03 15:30:10

标签: c# asp.net gridview

我无法弄清楚如何在动态创建的gridview中访问控件的值。问题是我不知道控件的名称。如果我知道控件的名称我可以做到这一点:

string dropDownListText =((DropDownList).row.FindControl("DropDownList1")).SelectedItem.Value;`

我知道控件的类型,我知道它所在的单元格。有没有办法使用控件的信息,我必须能够访问控件的值?

3 个答案:

答案 0 :(得分:2)

如果你知道它是什么细胞,那么你可以做这样的事情;

TableCell tc = GridView1.Cells[indexOfCell]; 
// where GridView1 is the id of your GridView and indexOfCell is your index
foreach ( Control c in tc.Controls ){
    if ( c is YourControlTypeThatYouKnow ){
        YourControlTypeThatYouKnow myControl = (YourControlTypeThatYouKnow)c;
    }
}

如果您不知道它究竟是哪个单元格,那么您始终可以遍历每个单元格。我相信Linq有一个更好的方法。

使用Linq(我认为这应该有用)

var controls = GridView1.Cells[indexOfCell].Cast<Control>();
YourControlTypeThatYouKnow myControl = (YourControlTypeThatYouKnow) controls.Where( x => x is YourControlTypeThatYouKnow).FirstOrDefault();

答案 1 :(得分:0)

在GridView的ItemDataBound事件处理程序上,按如下方式访问表格单元格。在单元格内,Controls集合允许您访问嵌入在单元格中的ASP控件

TableCell cell = e.Item.Cells[0];
if (cell.Controls.Count > 0)
{
   cell.Controls[0].Visible = false;
}

答案 2 :(得分:0)

我遇到了同样的问题。向您的字段添加命令名称,如CommandName =“ProjectClick”。然后添加一个rowcommand并在row命令中执行以下操作:

if (e.CommandName.Equals("ProjectClick")) {
}

或者你可以使用文字:

if (e.CommandName.Equals("")) {
    if (((System.Web.UI.WebControls.LinkButton)(e.CommandSource)).Text.Equals("Projects")) {
    }
}