【解決方法】グリッドビュー内でファイルアップロードコントロールを管理する方法 ファイルアップロードでファイルのパスを取得する方法

[ad_1]

こんにちは、みんな..
これにグリッドビューがあり、ファイルアップロードコントロールとアップロードというボタンを配置しました
アップロードボタンをクリックすると、アップロードコントロールでファイルパスを取得する必要があり、目的の場所に保存する必要があります
ここで私はこの方法で試しました

XML
<asp:GridView ID="GridView1" CellPadding="4" runat="server" OnRowCommand="GridView1_RowCommand"
                                                AutoGenerateColumns="false" AllowPaging="true" AllowSorting="true" PageSize="5"
                                                Width="95%" OnPageIndexChanging="GridView1_PageIndexChanging" OnRowDeleting="GridView1_RowDeleting">
                                                <AlternatingRowStyle BackColor="aliceBlue" />
                                                <HeaderStyle HorizontalAlign="Left" />
                                                <Columns>
                                                    <asp:TemplateField Visible="false">
                                                        <ItemTemplate>
                                                            <asp:Label ID="eid" runat="server" Text='<%# Eval("uid") %>'></asp:Label>
                                                        </ItemTemplate>
                                                    </asp:TemplateField>
                                                    <asp:BoundField DataField="ccode" HeaderText="Company Code" />
                                                    <asp:BoundField DataField="cname" HeaderText="Company Name" />
                                                    <asp:TemplateField HeaderText="Company Logo">
                                                        <ItemTemplate>
                                                            <asp:Image ID="LogoImage" ImageUrl="~/images/logo-not-available.jpg" runat="server"
                                                                Height="80px" Width="150px" />
                                                        </ItemTemplate>
                                                    </asp:TemplateField>
                                                    <asp:TemplateField Visible="false">
                                                        <ItemTemplate>
                                                            <asp:Label ID="logopathlbl" runat="server" Text='<%# Eval("logopath") %>'></asp:Label>
                                                        </ItemTemplate>
                                                    </asp:TemplateField>
                                                    <asp:TemplateField HeaderText="Logo Upload">
                                                        <ItemTemplate>
                                                            <asp:FileUpload ID="FileUpload4" runat="server" />
                                                            <asp:Button ID="bt_upload" runat="server" EnableViewState="False" Text="Upload" CommandName="Upload" />
                                                        </ItemTemplate>
                                                    </asp:TemplateField>
                                                </Columns>
                                            </asp:GridView>

次のような行コマンドで背後のコードから呼び出しているとき

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        Button bts = e.CommandSource as Button;
        Response.Write(bts.Parent.Parent.GetType().ToString());
        if (e.CommandName.ToLower() == "upload")
        {
            FileUpload fu = bts.Parent.Parent.FindControl("FileUpload4") as FileUpload;//here it is detecting file upload4 

            if (fu.HasFile)//here it is showing no file in file upload control
            {
                Response.Write(fu.PostedFile.FileName);
            }
        }
    }

あるいは他の方法を教えてください。
これは私の大きな問題です、誰か助けてくれませんか
前もって感謝します

解決策 3

やあ

うまくいくはずです…
やってみる…

私が作成して実行したコード全体を確認してください。

クライアントコード内:

    <body>
    <form id="form1" runat="server">
    <div>
        <table width="100%">
            <tr>
                <td>
                    <asp:GridView ID="GridView1" CellPadding="4" runat="server" OnRowCommand="GridView1_RowCommand"
                        AutoGenerateColumns="false" AllowPaging="true" AllowSorting="true" PageSize="5"
                        Width="95%" OnPageIndexChanging="GridView1_PageIndexChanging" OnRowDeleting="GridView1_RowDeleting" EmptyDataText="No record in Company Table">
                        <AlternatingRowStyle BackColor="aliceBlue" />
                        <HeaderStyle HorizontalAlign="Left" />
                        <Columns>
                            <asp:TemplateField Visible="false">
                                <ItemTemplate>
                                    <asp:Label ID="eid" runat="server" Text='<%# Eval("uid") %>'></asp:Label>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:BoundField DataField="ccode" HeaderText="Company Code" />
                            <asp:BoundField DataField="cname" HeaderText="Company Name" />
                            <asp:TemplateField HeaderText="Company Logo">
                                <ItemTemplate>
                                    <asp:Image ID="LogoImage" ImageUrl="~/Images/mcts.JPG" runat="server" Height="80px"
                                        Width="150px" />
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField Visible="false">
                                <ItemTemplate>
                                    <asp:Label ID="logopathlbl" runat="server" Text='<%# Eval("logopath") %>'></asp:Label>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Logo Upload">
                                <ItemTemplate>
                                    <asp:FileUpload ID="FileUpload4" runat="server" />
                                    <asp:Button ID="bt_upload" runat="server" EnableViewState="False" Text="Upload" CommandName="Upload" />
                                </ItemTemplate>
                            </asp:TemplateField>
                        </Columns>
                    </asp:GridView>
                </td>
            </tr>
        </table>
    </div>
    </form>
</body>

私のコードビハインド:

   public class Company
{
    private string uid;
    private string ccode;
    private string cname;
    private string logopath;
    
    public string Uid { get { return uid; } set { uid = value; } }
    public string Ccode { get { return ccode; } set { ccode = value; } }
    public string Cname { get { return cname; } set { cname = value; } }
    public string Logopath{get { return logopath; }set { logopath = value; }}
    public Company()
    { }
}

public partial class Default2 : System.Web.UI.Page
{
    string myConn = ConfigurationManager.ConnectionStrings["TestConn"].ConnectionString;
    SqlConnection conn;
    SqlCommand cmd;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            List<Company> coLst = new List<Company>();
            using (conn = new SqlConnection(myConn))
            {
                conn.Open();
                StringBuilder sbQry = new StringBuilder();
                sbQry.Append("SELECT * from Company ");
                using (cmd = new SqlCommand(sbQry.ToString(), conn))
                {
                    cmd.CommandType = CommandType.Text;
                    using (SqlDataReader odr = cmd.ExecuteReader())
                    {
                        while (odr.Read())
                        {
                            Company company = new Company();
                            {
                                company.Ccode = odr["uid"].ToString();
                                company.Ccode = odr["ccode"].ToString();
                                company.Cname = odr["cname"].ToString();
                                company.Logopath = odr["logopath"].ToString();
                            }
                            coLst.Add(company);
                        }
                    }
                }
            }
            GridView1.DataSource = coLst;
            GridView1.DataBind();
        }
    }
    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        Button bts = e.CommandSource as Button;
        Response.Write(bts.Parent.Parent.GetType().ToString());
        if (e.CommandName.ToLower() != "upload")
        {
            return;
        }
        FileUpload fu = bts.FindControl("FileUpload4") as FileUpload;//here 
        if (fu.HasFile)
        {
            bool upload = true;
            string fleUpload = Path.GetExtension(fu.FileName.ToString());
            if (fleUpload.Trim().ToLower() == ".xls" | fleUpload.Trim().ToLower() == ".xlsx")
            {
                fu.SaveAs(Server.MapPath("~/UpLoadPath/" + fu.FileName.ToString()));
                string uploadedFile = (Server.MapPath("~/UpLoadPath/" + fu.FileName.ToString()));
                //Someting to do?...
            }
            else
            {
                upload = false;
                // Something to do?...
            }
            if (upload)
            {
                // somthing to do?...
            }
        }
        else
        {
            //Something to do?...
        }
    }

ニーズに合わせてこれを改訂しました。

返信が役立つ場合は回答としてマークし、役に立たない場合はマークを外すことを忘れないでください。

よろしく、

全般的

解決策 2

やあ、

役立つ場合はこれを試してください…
コードビハインドの例:

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    Button bts = e.CommandSource as Button;
    Response.Write(bts.Parent.Parent.GetType().ToString());
    if (e.CommandName.ToLower() != "upload")
    {
        return;
    }
    FileUpload fu = bts.FindControl("FileUpload4") as FileUpload;//here
    if (fu.HasFile)
    {
        bool upload = true;
        string fleUpload = Path.GetExtension(fu.FileName.ToString());
        if (fleUpload.Trim().ToLower() == ".xlsx")
        {
            fu.SaveAs(Server.MapPath("~/UpLoadPath/" + fu.FileName.ToString()));
            string uploadedFile = (Server.MapPath("~/UpLoadPath/" + fu.FileName.ToString()));

            //Someting to do?...
        }
        else
        {
            upload = false;
            // Something to do?...
        }
        if (upload)
        {
              // somthing to do?...
        }
    }
    else
    {
        //Something to do?...
    }
}

サブディレクトリが必要です アップロードパス あなたの中ではなくあなたのアプリドメイン内で
プロジェクト 解決策でそのようなファイルをコピーし、アプリで表示できるようにします。 そうしないと、これは可能性があります
ローカルで実行しますが、公開時にファイルが見つからないエラーが発生する可能性があります…

これがお役に立てば幸いです…

返信が役立つ場合は回答としてマークし、役に立たない場合はマークを外すことを忘れないでください。

よろしく、

全般的

解決策 1

[ad_2]

コメント

タイトルとURLをコピーしました