使用ajax fileupload时的Databind gridview [英] Databind gridview while using ajax fileupload

查看:66
本文介绍了使用ajax fileupload时的Databind gridview的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用AjaxToolKit上传文件。上载的文件保存在服务器上的文件夹中,也包含在Sql server数据库中。我有一个gridview来显示上传的文件。我在.aspx页面中的代码是:

< div> 
< asp:ToolkitScriptManager ID =ScriptManager1runat =server>
< / asp:ToolkitScriptManager>

< asp:AjaxFileUpload ID =AjaxFileUpload1runat =serverOnUploadComplete =AjaxFileUpload1_UploadCompleteAllowedFileTypes =jpg,bmp,png,docx,txtMaximumNumberOfFiles =10ThrobberID =Loader />
< asp:Image ID =Loaderrunat =serverImageUrl =〜/ Loading.gifCssClass =nodisplay/>
< / div>
< div>
< asp:SqlDataSource ID =SqlDataSource1runat =serverConnectionString =<%$ ConnectionStrings:Connectionstring%> SelectCommand =SELECT * FROM [Images]>< / asp:SqlDataSource>
< br />
< asp:GridView ID =GridView1runat =serverAutoGenerateColumns =FalseDataKeyNames =IDDataSourceID =SqlDataSource1>
< Columns>
< asp:BoundField DataField =IDHeaderText =IDInsertVisible =FalseReadOnly =TrueSortExpression =ID/>
< asp:TemplateField HeaderText =imagenameSortExpression =imagename>
< EditItemTemplate>
< asp:TextBox ID =TextBox1runat =serverText ='<%#Bind(imagename)%>'>< / asp:TextBox>
< / EditItemTemplate>
< ItemTemplate>
< img src ='<%#/ Album /+ Eval(imagename)%>'/>
< / ItemTemplate>
< / asp:TemplateField>
< / Columns>
< / asp:GridView>

< / div>





和代码隐藏我有

 protected void AjaxFileUpload1_UploadComplete(object sender,AjaxControlToolkit.AjaxFileUploadEventArgs e)
{
string filename = e.FileName.ToString();
string filepath =/ Album /+ filename;
string fullpath = Server.MapPath(〜+ filepath);
AjaxFileUpload1.SaveAs(fullpath);

string cstr = ConfigurationManager.ConnectionStrings [Connectionstring]。ConnectionString;
using(SqlConnection con = new SqlConnection(cstr))
{
con.Open();
SqlCommand com = new SqlCommand(INSERT INTO Images(imagename)VALUES(@imagename),con);
com.Parameters.AddWithValue(@ imagename,filename);
com.ExecuteNonQuery();
con.Close();
GridView1.DataBind();
}
//Page.Response.Redirect(HttpContext.Current.Request.Url.ToString(),true);

}





该程序工作正常,但gridview的数据绑定不起作用。每次上传后,用户都必须刷新页面以查看gridview的最新位置。



我尝试使用代码后面的刷新页面,但它似乎没有用。 (请参阅上面代码中的注释部分)



我有什么方法可以在每次上传后对gridview进行数据绑定或显示更新的gridview,就像我们在fileupload中所做的那样在ASP.NET中没有使用AjaxControlToolKit。



感谢您的帮助。

解决方案

ConnectionStrings:Connectionstring%> ;SelectCommand =SELECT * FROM [Images]>< / asp:SqlDataSource>
< br />
< asp:GridView ID =GridView1runat =server AutoGenerateColumns =FalseDataKeyNames =IDDataSourceID =SqlDataSource1>
< Columns>
< asp:BoundField DataField =IDHeaderText =IDInsertVisible =FalseReadOnly =TrueSortExpression =ID/>
< asp:TemplateField HeaderText =imagenameSortExpression =imagename>
< EditItemTemplate>
< asp:TextBox ID =特克斯tBox1runat =serverText ='<%#Bind(imagename)%>'>< / asp:TextBox>
< / EditItemTemplate>
< ItemTemplate>
< img src ='<%#/ Album /+ Eval(imagename)%>'/>
< / ItemTemplate>
< / asp:TemplateField>
< / Columns>
< / asp:GridView>

< / div>





和代码隐藏我有

 protected void AjaxFileUpload1_UploadComplete(object sender,AjaxControlToolkit.AjaxFileUploadEventArgs e)
{
string filename = e.FileName.ToString();
string filepath =/ Album /+ filename;
string fullpath = Server.MapPath(〜+ filepath);
AjaxFileUpload1.SaveAs(fullpath);

string cstr = ConfigurationManager.ConnectionStrings [Connectionstring]。ConnectionString;
using(SqlConnection con = new SqlConnection(cstr))
{
con.Open();
SqlCommand com = new SqlCommand(INSERT INTO Images(imagename)VALUES(@imagename),con);
com.Parameters.AddWithValue(@ imagename,filename);
com.ExecuteNonQuery();
con.Close();
GridView1.DataBind();
}
//Page.Response.Redirect(HttpContext.Current.Request.Url.ToString(),true);

}





该程序工作正常,但gridview的数据绑定不起作用。每次上传后,用户都必须刷新页面以查看gridview的最新位置。



我尝试使用代码后面的刷新页面,但它似乎没有用。 (请参阅上面代码中的注释部分)



我有什么方法可以在每次上传后对gridview进行数据绑定或显示更新的gridview,就像我们在fileupload中所做的那样在ASP.NET中没有使用AjaxControlToolKit。



感谢您的帮助。


我担心你无法刷新gridview方式。在上传ajax文件上传后,你必须使用javascript函数再次绑定gridview。

你可以执行以下操作之一:

1)只需使用OnClientUploadComplete =ShowUpdate( )在ajax文件上传控件和使用中

 <   script     type   =  text / javascript >  
function ShowUpdate(){
__doPostBack( );
}
< / script >



作为其javascript函数。

2)你可以将gridview放在更新面板中,然后回发更新使用javascript函数的面板onjientUpload完成ajax文件上传



你可以参考下面的链接来完成你的工作:

AjaxFileUpload +到+刷新+ GridView控件+ + +上传完成 [之后? ^ ]

reload-gridview-or-repeater-on-ajaxfileupload-uploadcomplete-event-in-asp-net [ ^ ]



希望它有助于......快乐的编码! :)


I am using AjaxToolKit for uploading files. The uploaded files are saved in a folder on server and also included in an Sql server database. I have a gridview to show the files uploaded. My code in .aspx page is:

<div>
        <asp:ToolkitScriptManager ID="ScriptManager1" runat="server">
        </asp:ToolkitScriptManager>
       
        <asp:AjaxFileUpload ID="AjaxFileUpload1" runat="server" OnUploadComplete="AjaxFileUpload1_UploadComplete"  AllowedFileTypes="jpg,bmp,png,docx,txt" MaximumNumberOfFiles="10" ThrobberID="Loader" />
        <asp:Image ID="Loader" runat="server" ImageUrl="~/Loading.gif" CssClass="nodisplay" />
    </div>
    <div>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:Connectionstring %>" SelectCommand="SELECT * FROM [Images]"></asp:SqlDataSource>
            <br />
            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ID" DataSourceID="SqlDataSource1">
                <Columns>
                    <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" ReadOnly="True" SortExpression="ID" />
                    <asp:TemplateField HeaderText="imagename" SortExpression="imagename">
                        <EditItemTemplate>
                            <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("imagename") %>'></asp:TextBox>
                        </EditItemTemplate>
                        <ItemTemplate>
                            <img src='<%# "/Album/"+Eval("imagename") %>'/ >
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
        
           </div>



and in codebehind i have

protected void AjaxFileUpload1_UploadComplete(object sender, AjaxControlToolkit.AjaxFileUploadEventArgs e)
    {
        string filename = e.FileName.ToString();
        string filepath = "/Album/" + filename;
        string fullpath = Server.MapPath("~" + filepath);
        AjaxFileUpload1.SaveAs(fullpath);

        string cstr = ConfigurationManager.ConnectionStrings["Connectionstring"].ConnectionString;
        using(SqlConnection con = new SqlConnection(cstr))
        {
            con.Open();
            SqlCommand com = new SqlCommand("INSERT INTO Images (imagename) VALUES (@imagename)", con);
            com.Parameters.AddWithValue("@imagename", filename);
            com.ExecuteNonQuery();
            con.Close();
            GridView1.DataBind();
                    }
      //Page.Response.Redirect(HttpContext.Current.Request.Url.ToString(), true);
 
    }



The program works fine except that databiding for gridview does not work. After every upload user has to refresh the page to see the gridview latest position.

I have tried using refreshing the page from code behind but it does no appear to work. (Please see comment-out portion in code behind above)

Is there any way i can databind the gridview or show updated gridview after each upload as we can do in fileupload in ASP.NET without using AjaxControlToolKit.

Thanks for help.

解决方案

ConnectionStrings:Connectionstring %>" SelectCommand="SELECT * FROM [Images]"></asp:SqlDataSource> <br /> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ID" DataSourceID="SqlDataSource1"> <Columns> <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" ReadOnly="True" SortExpression="ID" /> <asp:TemplateField HeaderText="imagename" SortExpression="imagename"> <EditItemTemplate> <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("imagename") %>'></asp:TextBox> </EditItemTemplate> <ItemTemplate> <img src='<%# "/Album/"+Eval("imagename") %>'/ > </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </div>



and in codebehind i have

protected void AjaxFileUpload1_UploadComplete(object sender, AjaxControlToolkit.AjaxFileUploadEventArgs e)
    {
        string filename = e.FileName.ToString();
        string filepath = "/Album/" + filename;
        string fullpath = Server.MapPath("~" + filepath);
        AjaxFileUpload1.SaveAs(fullpath);

        string cstr = ConfigurationManager.ConnectionStrings["Connectionstring"].ConnectionString;
        using(SqlConnection con = new SqlConnection(cstr))
        {
            con.Open();
            SqlCommand com = new SqlCommand("INSERT INTO Images (imagename) VALUES (@imagename)", con);
            com.Parameters.AddWithValue("@imagename", filename);
            com.ExecuteNonQuery();
            con.Close();
            GridView1.DataBind();
                    }
      //Page.Response.Redirect(HttpContext.Current.Request.Url.ToString(), true);
 
    }



The program works fine except that databiding for gridview does not work. After every upload user has to refresh the page to see the gridview latest position.

I have tried using refreshing the page from code behind but it does no appear to work. (Please see comment-out portion in code behind above)

Is there any way i can databind the gridview or show updated gridview after each upload as we can do in fileupload in ASP.NET without using AjaxControlToolKit.

Thanks for help.


I'm afraid you can not refresh gridview in that manner. You have to use javascript function to bind gridview again after uploading in ajax file upload.
You can do one of the following:
1) simply use OnClientUploadComplete="ShowUpdate()" in ajax file upload control and use

<script type="text/javascript">
        function ShowUpdate() {
            __doPostBack();
        }
</script>


as its javascript function.
2) you can put the gridview inside update panel and then postback the update panel using javascript function OnClientUploadComplete of ajax file upload

You may refer below links to get your job done:
AjaxFileUpload+to+refresh+GridView+after+upload+complete[^]
reload-gridview-or-repeater-on-ajaxfileupload-uploadcomplete-event-in-asp-net[^]

Hope it Helps.. Happy Coding! :)


这篇关于使用ajax fileupload时的Databind gridview的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆