0

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

1 に答える 1

1

ボタン ハンドラーの最初の行では、コントロール自体を FindControlRecursive の 2 番目のパラメーターとして渡しています。探しているコントロールの文字列 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

    }
于 2012-09-12T17:19:38.797 に答える