0
我一直試圖整天解決這個問題,希望有人能給我一個答案! (請記住我是這個編碼的初學者)。 我有一個數據庫,其中一個字段是imageurl
。我必須能夠更新此字段,並認爲我可以使用GridView
和UpdateItemTemplate
。 我很快發現你必須使用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);
}