簡體   English   中英

FindControl遞歸-在GridView中找到我的FileUpload控件時出錯

[英]FindControl recursive - error when finding my FileUpload control in GridView

我整天都在嘗試解決此問題,希望有人能給我答案! (請記住,我是此編碼的初學者)。 我有一個數據庫,其中一個字段是imageurl 我必須能夠更新此字段,並認為可以使用帶有UpdateItemTemplateGridView進行UpdateItemTemplate 我很快發現,您必須使用FindControl遞歸方法來執行此操作-因此我實現了代碼,但現在遇到了另一個錯誤。

我想我知道為什么會出現錯誤,但不知道如何解決。 似乎在tools.cs文件中,控件的標識符設置為數據類型String ,但我不知道如何處理FileUpload

這是錯誤消息:

無法從“ System.Web.UI.WebControls.FileUpload”轉換為“字符串”

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);
}

在按鈕處理程序的第一行上,您要將控件本身作為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

    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM