FindControl递归 - 在GridView中查找我的FileUpload控件时出错

时间:2012-09-12 17:13:54

标签: c# asp.net gridview file-upload findcontrol

我一直在努力解决这个问题,希望有人能给我一个答案! (请记住,我是这个编码的初学者)。 我有一个数据库,其中一个字段是imageurl。我必须能够更新此字段,并认为我可以使用GridView UpdateItemTemplate来执行此操作。 我很快发现你必须使用FindControl递归方法来实现这一点 - 所以我实现了代码,现在我又遇到了另一个错误。

我想我知道错误出现的原因,但不知道如何修复它。似乎在tools.cs文件中,控件的标识符设置为数据类型String,但我不知道如何处理FileUpload

以下是错误消息:

  

无法从'System.Web.UI.WebControls.FileUpload'转换为'string'

ASP.NET GridView控件:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
  DataKeyNames="DrinkCategoryID" DataSourceID="ObjectDataSource1">
  <Columns>
    <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
    <asp:BoundField DataField="DrinkCategoryID" HeaderText="DrinkCategoryID" 
      InsertVisible="False" ReadOnly="True" SortExpression="DrinkCategoryID" />
    <asp:TemplateField HeaderText="DrinksCategoryName" 
      SortExpression="DrinksCategoryName">
    <EditItemTemplate>
      <asp:FileUpload ID="FileUpload1" runat="server" />
    </EditItemTemplate>
    <ItemTemplate>
      <asp:Label ID="Label1" runat="server" 
        Text='<%# Bind("DrinksCategoryName") %>'></asp:Label>
    </ItemTemplate>
    </asp:TemplateField>
  </Columns>
</asp:GridView>

工具(FindControl)

public static Control FindControlRecursive(Control Root, string Id)
{
  if (Root.ID == Id)
    return Root;

    foreach (Control Ctl in Root.Controls)
    {
      Control FoundCtl = FindControlRecursive(Ctl, Id);
      if (FoundCtl != null)
        return FoundCtl;
    }

    return null;
}

Web表单背后的代码(单击保存按钮的事件)

protected void btnGem_Click(object sender, EventArgs e)
{
  FileUpload FileUpload1 = (FileUpload)Tools.FindControlRecursive(
    GridView1, FileUpload1);
  //This seems to work fine
  TextBox txtBox = (TextBox)Tools.FindControlRecursive(GridView1, txtBox.Text);
}

1 个答案:

答案 0 :(得分:1)

在按钮处理程序的第一行,您将控件本身作为FindControlRecursive的第二个参数传递 - 您需要传入您正在查找的控件的字符串ID。换句话说:

 protected void btnGem_Click(object sender, EventArgs e)
    {
        FileUpload FileUpload1 = (FileUpload)Tools.FindControlRecursive(GridView1, "FileUpload1");
TextBox txtBox = (TextBox)Tools.FindControlRecursive(GridView1, txtBox.Text); //This seems to work fine

    }