私はこれを修正するために一日中努力してきました、誰かが私に答えをくれることを願っています!(私はこのコーディングの初心者であることを覚えておいてください)。フィールドの1つが。であるデータベースがあります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);
}