загрузка файла в gridview - PullRequest
4 голосов
/ 12 мая 2011

Мне нужно добавить столбец с элементом управления загрузкой файлов в сетку, чтобы я мог загружать файлы для любой конкретной строки.Возможно ли это сделать, в идеале я должен быть в состоянии сделать это, не переводя сетку в состояние редактирования.

Ответы [ 5 ]

10 голосов
/ 12 мая 2011

Вы можете использовать это в следующем порядке:

   <asp:TemplateField HeaderText="UploadImage">

   <ItemTemplate>

      <asp:Image ImageUrl="~/images/1.jpg" runat="server" ID="image" /> // shown only when not in edit mode

    </ItemTemplate>

   <EditItemTemplate>

       <asp:FileUpload ID="FileUpload1" runat="server" /> // shown only in edit mode

   </EditItemTemplate>

  </asp:TemplateField>

Наконец, включите следующее для входа в режим редактирования.

       <asp:commandField showEditButton="true" showCancelButton="true"> 

Затем добавьте два события следующим образом:

   protected void GridView1_RowEditing(object sender, GridViewUpdateEventArgs e)
   { 
       gvwID.EditIndex=e.NewEditIndex;
       BindGrid();
   }   

    protected void GridView1_RowCancelEdit(object sender, GridViewUpdateEventArgs e)
    {  
          gvwID.EditIndex=-1;
           BindGrid();             
    }   

Элемент управления FileUpload не будет автоматически сохранять загруженный файл.Чтобы сохранить файл, вам нужно использовать метод SaveAs элемента управления FileUpload.Прежде чем вы сможете использовать метод SaveAs, вам нужно получить экземпляр элемента управления FileUpload для строки, которую вы редактируете.Чтобы получить экземпляр элемента управления, вы можете подключиться к событию RowUpdating GridView.Следующий код получит экземпляр элемента управления FileUpload и сохранит загруженный файл:

   protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
   {

       int RowID=Convert.ToInt32(gvwID.DataKeys[e.RowIndex].value);

       FileUpload fileUpload = GridView1.Rows[e.RowIndex].FindControl("FileUpload1") as   FileUpload; 

     if(fileUpload.HasFile)
     {

       fileUpload.SaveAs(System.IO.Path.Combine(Server.MapPath("Images"), fileUpload.FileName)); 

        //update db using the name of the file corresponding to RowID
      }

       gvwID.EditIndex=-1;
       BindGrid();

    }

Надеюсь, это поможет ...

0 голосов
/ 12 ноября 2013
<asp:ScriptManager runat="server" ID="scm"></asp:ScriptManager>

<asp:UpdatePanel runat="server" ID="upMain" UpdateMode="Conditional"> 
<ContentTemplate>

  <asp:GridView AutoGenerateColumns="False" runat="server" ID="dt">  
<Columns>    
<asp:TemplateField HeaderText="Catagory">        
<ItemTemplate>            
<asp:DropDownList runat="server" ID="ddlSubCat">            
</asp:DropDownList>        
</ItemTemplate>    
</asp:TemplateField>    

<asp:TemplateField HeaderText="Attachments">        
<ItemTemplate>           

<asp:UpdatePanel runat="server" UpdateMode="Conditional" ID="updFU">                   <ContentTemplate>      
<asp:FileUpload runat="server" ID="updCon" /><asp:Button runat="server" ID="btnUpload" Text="Upload" />            
</ContentTemplate>            
<Triggers>              
<asp:PostBackTrigger ControlID="btnUpload" />            
</Triggers>      
</asp:UpdatePanel>   

</ItemTemplate>    
</asp:TemplateField>  
</Columns>  
</asp:GridView>

</ContentTemplate>
</asp:UpdatePanel>
0 голосов
/ 04 мая 2012

EditTemplate выглядит так:

    <EditItemTemplate>

       <asp:TextBox ID="txtImage" runat="server" Text='<%# Bind("Image") %>' Visible="False"></asp:TextBox>
       <asp:FileUpload ID="FileUpload1" runat="server" />

    </EditItemTemplate>

В этом коде будет загружен файл при обновлении строки:

  protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    GridViewRow row = GridView1.Rows[e.RowIndex] as GridViewRow;
    FileUpload FileUpload1 = (FileUpload)GridView1.Rows[e.RowIndex].FindControl("FileUpload1");

    if (FileUpload1 != null && FileUpload1.HasFile)
    {
        FileUpload1.SaveAs(Server.MapPath("~/uploads/" + myfilename));
    }
}

Эта проверка выполняется, если файл не выбран, поэтому выбрано предыдущее имя. Обратите внимание, что в шаблоне редактирования мы поместили текстовое поле с видимостью false, которое привязывается к имени изображения в БД

.
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (GridView1.EditIndex == -1) return;
    FileUpload fileUpLoad = GridView1.Rows[GridView1.EditIndex].FindControl("FileUpload1") as FileUpload;
    string fileName = fileUpLoad.FileName;
    TextBox txtImage = GridView1.Rows[GridView1.EditIndex].FindControl("txtImage") as TextBox;

    if (fileUpLoad != null && fileUpLoad.HasFile)
    {
        txtImage.Text = fileUpLoad.FileName;
    }
    else
    {
        txtImage.Text = txtImage.Text;
    }

}
0 голосов
/ 12 мая 2011

Sudha есть отличный пост с полной функциональностью загрузки файлов в GridView:

Контроль загрузки файла в gridview?


<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ID"
DataSourceID="AccessDataSource1" Width="148px" OnRowCommand="GridView1_RowCommand">
<Columns>
<asp:BoundField DataField="ID" HeaderText="ID" ReadOnly="True" SortExpression="ID" />
<asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="lblFileUpLoad" runat="server"></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:FileUpload ID="FileUpload1" runat="server" />
</EditItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowEditButton="true" ShowDeleteButton="true" />
</Columns>
</asp:GridView>
....
0 голосов
/ 12 мая 2011

Следующая ссылка поможет вам:

http://msdn.microsoft.com/en-us/library/7tas5c80.aspx

В нем есть пример кода для добавления DateTimePicker в ячейку просмотра данных.Вы можете добавить контроль загрузки файла таким же образом ...

Надеюсь, это поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...