मेरे पास मेरे sqlserver डेटाबेस में फ़ाइल अपलोड करने के लिए एक मॉड्यूल है, जहां मेरे पास FName: varchar फ़ाइल नाम के लिए फ़ील्ड है, सामग्री प्रकार: फ़ाइल टाइप के लिए nvarchar, और डेटा: वास्तविक डेटा के लिए varbinary। तो अब मैं बाउंडफिल्ड का उपयोग करके ग्रिडव्यू में इसे पुनः प्राप्त करने में सक्षम हूं जो केवल मेरे द्वारा अपलोड की गई फ़ाइल का नाम प्रदर्शित करता है, लेकिन जो मैं वास्तव में चाहता हूं वह डेटाबेस से फ़ाइल को पहचानना है और यदि यह एक छवि फ़ाइल है तो उसे उस छवि को प्रदर्शित करना चाहिए ग्रिडव्यू में और यदि यह छवि के अलावा कोई अन्य फ़ाइल है तो इसे केवल फ़ाइल नाम प्रदर्शित करने दें। नोट मैं फ़ाइल अपलोड करने और फ़ाइल पथ का उपयोग करके इसे पुनर्प्राप्त करने के लिए फ़ोल्डर का उपयोग नहीं करना चाहता हूं। क्या किसी के पास साझा करने के लिए ऐसा ही अनुभव होगा:

<asp:GridView ID="GridView1" runat="server" HeaderStyle-BackColor="#3AC0F2" HeaderStyle-ForeColor="White"
    RowStyle-BackColor="#A1DCF2" AlternatingRowStyle-BackColor="White" AlternatingRowStyle-ForeColor="#000"
    AutoGenerateColumns="false">
    <Columns>
        <asp:BoundField DataField="Name" HeaderText="File Name"/>
        <asp:TemplateField ItemStyle-HorizontalAlign = "Center">
            <ItemTemplate>
                <asp:LinkButton ID="lnkDownload" runat="server" Text="Download" OnClick="DownloadFile"
                    CommandArgument='<%# Eval("Id") %>'></asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

कोड के पीछे:

protected void Upload(object sender, EventArgs e)
{
    string filename = Path.GetFileName(FileUpload1.PostedFile.FileName);
    string contentType = FileUpload1.PostedFile.ContentType;
    using (Stream fs = FileUpload1.PostedFile.InputStream)
    {
        using (BinaryReader br = new BinaryReader(fs))
        {
            byte[] bytes = br.ReadBytes((Int32)fs.Length);
            string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
            using (SqlConnection con = new SqlConnection(constr))
            {
                string query = "insert into tblFiles values (@Name, @ContentType, @Data)";
                using (SqlCommand cmd = new SqlCommand(query))
                {
                    cmd.Connection = con;
                    cmd.Parameters.AddWithValue("@Name", filename);
                    cmd.Parameters.AddWithValue("@ContentType", contentType);
                    cmd.Parameters.AddWithValue("@Data", bytes);
                    con.Open();
                    cmd.ExecuteNonQuery();
                    con.Close();
                }
            }
        }
    }

}
0
Dharam Rai 16 अप्रैल 2017, 04:17
आपके पास सामग्री प्रकार सही है? आप इसका उपयोग यह तय करने के लिए क्यों नहीं करते कि क्या दिखाना है?
 – 
Krishna
16 अप्रैल 2017, 04:34
ठीक है, क्या मुझे आइटम टेम्पलेट में बाध्य/eval करने की ज़रूरत है या मैं इसे कैसे कर सकता हूं, क्या आप कृपया सटीक हो सकते हैं?
 – 
Dharam Rai
16 अप्रैल 2017, 04:38

1 उत्तर

सबसे बढ़िया उत्तर

डेटा को कैसे दिखाना है, यह तय करने के लिए आपको ContentType का उपयोग करने की आवश्यकता है

<asp:GridView ID="GridView1" runat="server" HeaderStyle-BackColor="#3AC0F2" HeaderStyle-ForeColor="White"
    RowStyle-BackColor="#A1DCF2" AlternatingRowStyle-BackColor="White" AlternatingRowStyle-ForeColor="#000" OnRowDataBound="GridView1_RowDataBound"
    AutoGenerateColumns="false">
    <Columns>
        <asp:BoundField DataField="Name" HeaderText="File Name"/>
        <asp:TemplateField ItemStyle-HorizontalAlign = "Center">
            <ItemTemplate>
                <asp:LinkButton ID="lnkDownload" runat="server" Text="Download" OnClick="DownloadFile"
                    CommandArgument='<%# Eval("Id") %>'></asp:LinkButton>
                <img runat="server" id="imgData" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

पंक्ति में डेटा बाउंड तय करता है कि क्या करना है

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    LinkButton lnkButton = (LinkButton)e.Row.Cells[1].FindControl("lnkDownload");
                    HtmlImage img = (HtmlImage)e.Row.Cells[1].FindControl("imgData");
                    if (DataBinder.Eval(e.Row.DataItem, "ContentType").ToString().Contains("image"))//like image/jpeg
                    {
                        lnkButton.Visible = false;
                        img.Visible = true;
                        img.Src = "data:image/png;base64," + Convert.ToBase64String((byte[])DataBinder.Eval(e.Row.DataItem,"Data"));
                    }
                    else
                    {
                        lnkButton.Visible = true;
                        img.Visible = false;
                    }
                }
            }
1
Krishna 16 अप्रैल 2017, 04:55
यह छवि प्रदर्शित नहीं कर रहा है और त्रुटि भी नहीं फेंक रहा है। आगे क्या है?
 – 
Dharam Rai
16 अप्रैल 2017, 06:19
क्या यह छवि को पंक्ति डेटा बाध्य में दृश्यमान बनाता है? क्या आपने डीबग किया? क्या हो रहा है ?
 – 
Krishna
16 अप्रैल 2017, 06:22
ठीक है, यह अब एकदम सही काम कर रहा है। अपनी सीख साझा करने के लिए धन्यवाद।
 – 
Dharam Rai
16 अप्रैल 2017, 09:49