【问题标题】:How can I access my dropdownlist control within my DataGrid?如何访问我的 DataGrid 中的下拉列表控件?
【发布时间】:2013-10-24 21:11:44
【问题描述】:

我有一个有 4 列的 DataGrid 控件(不是 GridView)。其中一列是 DropDownList。我想要做的是从我的 dgTicket_ItemDataBound(.....) 进程访问 DropDownList 控件,但我没有成功。

我已经研究并尝试了几种不同的方法,但都没有成功。

这就是我所拥有的:

protected void dgPrintTicket_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
      string SQL1 = @"SELECT Machine_Id FROM SFD00006 WHERE WC_Id = '" + wc + "'";

      DropDownList ddl = (DropDownList)e.Item.Cells[2].FindControl("ddlMachId");

      string val = ((DropDownList)dgPrintTicket.SelectedItem.Cells[2].FindControl("ddlMachId")).Text;

      if (ddl != null)
      {                    
          ddl.DataSource = Lib.getArrayList(SQL1);
          ddl.SelectedValue = val;
          ddl.DataBind();
      }
}

我想访问 DropDownList 并用我从 select 语句中获得的所有机器代码填充它,但我的 ddl 一直返回为 null。

任何帮助将不胜感激。

谢谢大家。

山姆

【问题讨论】:

标签: c# asp.net drop-down-menu datagrid


【解决方案1】:

您可以使用递归方法来查找控件。

我会这样做:

  Control FindControlRecursive(Control root, string name) {
      if (root.Name == name) {
         return base;
      }
      for (int i = 0; i < root.Controls.Count; ++i) {
           Control current = root.Controls[i];
           if (current.Name == name) {
               return current ;
           }
           else {
               Control recursiveControl = FindControlRecursive(current, name);
               if (recursiveControl != null)
               {
                    return recursiveControl;
               }
           }
      }
      return null;
  }

【讨论】:

  • 这是一个 Web 应用程序,而不是 Windows 窗体
  • 这个逻辑应该仍然适用,不是吗?
  • 这是我正在调用并将变量传递给的过程吗?我不确定我明白这是在做什么?参数'root'和'name'代表什么?
猜你喜欢
  • 2015-03-05
  • 2013-01-31
  • 2011-06-12
  • 1970-01-01
  • 2017-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-19
相关资源
最近更新 更多