2012-09-12 87 views
0

我一直試圖整天解決這個問題,希望有人能給我一個答案! (請記住我是這個編碼的初學者)。 我有一個數據庫,其中一個字段是imageurl。我必須能夠更新此字段,並認爲我可以使用GridViewUpdateItemTemplate。 我很快發現你必須使用FindControl遞歸方法才能這樣做 - 所以我實現了代碼,現在我又陷入了另一個錯誤。FindControl遞歸 - 在GridView中找到我的FileUpload控件時出錯

我想我知道爲什麼會出現錯誤,但不知道如何解決它。看來在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; 
} 

背後的網頁表單代碼(Click事件的保存按鈕)

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

在您的按鈕處理程序的第一行,你傳遞的控制本身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 

    }