2013-02-21 2 views
2

У меня есть контроль загрузки файлов в gridview, и это gridview находится внутри панели обновления , когда я пытаюсь обновить gridview, все работает, но путь к изображению из файла не сохраняется , пожалуйста, помогите мне ...fileupload не работает внутри gridview внутри панели обновления

page.aspx

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" BackColor="White" 
           BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="4" CellSpacing="4" 
           DataKeyNames="pid" ForeColor="Black" ShowHeaderWhenEmpty="True" 
           GridLines="Horizontal" onrowediting="GridView1_RowEditing" 
           onrowupdating="GridView1_RowUpdating" 
           onrowcancelingedit="GridView1_RowCancelingEdit" 
           onrowdeleting="GridView1_RowDeleting"> 
           <Columns> 
            <asp:TemplateField HeaderText="Operation"> 
             <EditItemTemplate> 
              <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" CommandName="Update" Text="Update"></asp:LinkButton>&nbsp; 
              <asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Cancel" Text="Cancel"></asp:LinkButton> 
             </EditItemTemplate> 
             <ItemTemplate> 
              <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Edit" Text="Edit" ForeColor="#94b52c"></asp:LinkButton>&nbsp; 
              <asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Delete" Text="Delete" ForeColor="#94b52c" 
                  OnClientClick="return confirm('Are You Sure Want To Delete ?');"></asp:LinkButton> 
             </ItemTemplate> 
             <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" /> 
             <ItemStyle Font-Bold="True" HorizontalAlign="Center" VerticalAlign="Middle" /> 
            </asp:TemplateField> 
            <asp:TemplateField HeaderText="Product ID" InsertVisible="False" SortExpression="pid"> 
             <EditItemTemplate> 
              <asp:Label ID="lblpid" runat="server" Text='<%# Eval("pid") %>'></asp:Label> 
             </EditItemTemplate> 
             <ItemTemplate> 
              <asp:Label ID="lblproductid" runat="server" Text='<%# Bind("pid") %>'></asp:Label> 
             </ItemTemplate> 
             <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" /> 
             <ItemStyle Font-Bold="True" HorizontalAlign="Center" VerticalAlign="Middle" /> 
            </asp:TemplateField> 
            <asp:TemplateField HeaderText="Product Detail" SortExpression="pdetail"> 
             <EditItemTemplate> 
              <asp:TextBox ID="txtproductdetail" runat="server" Text='<%# Bind("pdetail") %>'></asp:TextBox> 
             </EditItemTemplate> 
             <ItemTemplate> 
              <asp:Label ID="lblproductdetail" runat="server" Text='<%# Bind("pdetail") %>'></asp:Label> 
             </ItemTemplate> 
             <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" /> 
             <ItemStyle Font-Bold="True" HorizontalAlign="Center" VerticalAlign="Middle" /> 
            </asp:TemplateField> 
            <asp:TemplateField HeaderText="Product Image" SortExpression="pimage"> 
             <EditItemTemplate> 
              <asp:FileUpload ID="FileUpload1" runat="server" /> 
             </EditItemTemplate> 
             <ItemTemplate> 
              <asp:Image ID="imgproductimage" runat="server" ImageUrl='<%# Bind("pimage") %>' Height="50px" Width="50px"/> 
             </ItemTemplate> 
             <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" /> 
             <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" /> 
            </asp:TemplateField> 

           </Columns> 
           <FooterStyle BackColor="#F0F0F0" ForeColor="Black" /> 
           <HeaderStyle BackColor="#333333" Font-Bold="True" ForeColor="White" HorizontalAlign="Center" VerticalAlign="Middle" /> 
           <PagerStyle BackColor="White" ForeColor="Black" HorizontalAlign="Right" /> 
           <SelectedRowStyle BackColor="#CC3333" Font-Bold="True" ForeColor="White" /> 
           <SortedAscendingCellStyle BackColor="#F7F7F7" /> 
           <SortedAscendingHeaderStyle BackColor="#4B4B4B" /> 
           <SortedDescendingCellStyle BackColor="#E5E5E5" /> 
           <SortedDescendingHeaderStyle BackColor="#242121" /> 
          </asp:GridView> 
    </ContentTemplate> 
         </asp:UpdatePanel> 

здесь .cs файл

public void bindgrid() 
{ 
    string qry = "select pid,pdetail,pimage from productdetail p,categorydetail c where p.cid=c.cid"; 
    GridView1.DataSource = abal.Qry_Fire(qry); 
    GridView1.DataBind(); 
} 
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) 
{ 
    GridView1.EditIndex = e.NewEditIndex; 
    bindgrid(); 
} 
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{ 
    Label l = (Label)GridView1.Rows[e.RowIndex].FindControl("lblpid"); 
    TextBox txtproductdetail = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtproductdetail"); 
    FileUpload f = (FileUpload)GridView1.Rows[e.RowIndex].FindControl("FileUpload1"); 
    string path = "~/user/product_image/" + f.FileName.ToString(); 
    int msg = abal.Qry_All("update productdetail set pdetail='" + txtproductdetail.Text + "',pimage='" + path 

+ "' WHERE pid='" + Convert.ToInt32(l.Text) + "'"); 
    if(msg==1) 
     f.SaveAs(Server.MapPath(path)); 
    GridView1.EditIndex = -1; 
    bindgrid(); 
} 
+0

, что ошибка вы столкнулись – Arshad

+0

без триггера нет errror .. но имя файла не доступен .. поэтому в ** путь ** поле он пишет только ~/пользователь/product_image /, но должен be ~/user/product_image/filename.jpg –

+0

@merhardik, если ваш ответ решен, пожалуйста, обновите свой ответ, поскольку я получаю сообщение об ошибке с идентификатором «FileUpload1», зарегистрированным через RegisterAsyncPostBackControl, или RegisterPostBackControl должен реализовать либо INamingContainer, IPostBackDataHandler, либо IPostBackEventHandler –

ответ

1

просто добавить PostBackTrigger после </ContentTemplate> для FileUploader, как показано ниже:

</ContentTemplate> 
    <Triggers> 
    <asp:PostBackTrigger ControlID="FileUpload1" /> 
</Triggers> 
</asp:UpdatePanel> 

Update, если его внутри gridview, то вы можете попробовать следующий код:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    FileUpload flUpload = e.Row.FindControl("FileUpload1") as FileUpload; 
    ScriptManager.GetCurrent(this).RegisterPostBackControl(flUpload); 
} 

Update2 добавить событие OnRowDataBound в gridview:

<asp:gridview 
    id="GridView1" 
    onrowdatabound="GridView1_RowDataBound" 

rest добавить свой код для gridview

+0

он дает ошибку, например: «Элемент управления с идентификатором« FileUpload1 »не найден для триггера в UpdataPanel« UpdatePanel1 »« может быть причиной является FileUpload1 внутри gridview. Может ли помочь PLZ –

+0

проверить t он обновил ответ – Arshad

+0

все еще не работает .. с этим кодом нет никаких изменений .. rowupdating тоже не огонь –

0

Панель обновления dosen't правильно работает с некоторыми элементами управления аналогично Fileupload. Попробуйте сделать это с помощью ajax-вызова, который является лучшим вариантом.

+1

Каково решение? Можете ли вы его разработать? –

3

У меня была такая же проблема и исправлено с помощью нижеизложенного решения.

Добавить код в свой код внизу.

Page.Form.Attributes.Add("enctype", "multipart/form-data"); 

protected void gvLineItems_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 

    if (e.Row.RowState.Equals(DataControlRowState.Edit)) 
    { 
     Button btnUpload = e.Row.FindControl("btnUpload") as Button; 
     ScriptManager.GetCurrent(this).RegisterPostBackControl(btnUpload); 
    } 
    } 
} 

Я могу извлечь значение управления fileUpload после добавления вышеуказанного кода.

protected void UpdateRow(object sender, GridViewUpdateEventArgs e) 
{ 
    FileUpload uploadedFile = (FileUpload)dgDocuments.Rows[editIndex].FindControl("UploadFile"); 
    if (uploadedFile.HasFile) 
    { 
    uploadedFile.SaveAs(FileUploadURL + "\\Temp\\" + uploadedFile.FileName); 
    } 
} 
1

добавить: Page.Form.Attributes.Add ("ENCTYPE", "многослойную/форм-данных"); на страницу:

protected void Page_Load(object sender, EventArgs e) 
     { 
      Page.Form.Attributes.Add("enctype", "multipart/form-data"); 
      .............................. 
     } 

и попробуйте это.

</ContentTemplate> 
    <Triggers> 
    <asp:PostBackTrigger ControlID="GridView1" /> 
</Triggers> 
</asp:UpdatePanel> 
Смежные вопросы