使用Asp.Net C#选择所有图像
我是ASP.NET和C#的新手。 我试图从文件夹中检索所有图像并在页面上显示它,但它只选择一个图像。
我的ASP.NET代码:
我的C#代码:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data.SqlClient; using System.Data; using System.Configuration; namespace Blog { public partial class index : System.Web.UI.Page { SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["blogconnection"].ToString()); protected void Page_Load(object sender, EventArgs e) { con.Open(); string allimage; string qry="select * from images"; SqlCommand cmd = new SqlCommand(qry, con); SqlDataReader dr =cmd.ExecuteReader(); if (dr.HasRows) { while(dr.Read()) { if (!string.IsNullOrEmpty(Convert.ToString(dr["Image_Path"]))) { Image.ImageUrl = Convert.ToString(dr["Image_Path"]); } } } con.Close(); } } }
我想要的是:我想选择所有在sql表中存储路径的图像。
附加:有没有办法从文件夹中选择路径存储在sql中的video,意思是选择不同文件夹中的video和图像,并按指定日期或最新上传等显示在同一页面上。
任何帮助将不胜感激。
编辑#1
在PHP中我使用下面的代码来获取所有图像并显示它,是否有任何东西相当于ASP.NET中的下面的代码?
PHP代码
prepare('SELECT * FROM post'); $smt->execute(); ?>
fetch(PDO::FETCH_OBJ)): ?> <img src="https://stackoverflow.com/questions/33597934/select-all-images-using-asp-net-c-sharp/posts/Post_Path; ?>" alt="image" class="post-image"/> - Category; ?>
- Post on Post_Date; ?>
<a href="https://stackoverflow.com/questions/33597934/select-all-images-using-asp-net-c-sharp/post-description.php?id=Id ?>">Title; ?>
Post; ?>
在后面的代码中编写你的Collection()
方法来检索图像作为这样的Strings
List
( 也最好使用Using
语句 ):
protected IEnumerable Collection() { string address = ConfigurationManager.ConnectionStrings["blogconnection"].ToString(); using (SqlConnection con = new SqlConnection(address)) { con.Open(); string qry = "select * from images"; SqlCommand cmd = new SqlCommand(qry, con); using (SqlDataReader dr = cmd.ExecuteReader()) { if (!dr.HasRows) return allimage; while (dr.Read()) { if (!string.IsNullOrEmpty(Convert.ToString(dr["Image_Path"]))) { yield return (dr["Image_Path"].ToString()); } } } } }
然后你可以像这样使用asp:Repeater
:
或者你可以这样做:
您可以动态地将新的asp:image对象添加到form1。
Image img = new Image(); img.ImageUrl = dr["Image_Path"].ToString(); img.AlternateText = "Test image"; form1.Controls.Add(img);
问题出在这个声明中:
Image.ImageUrl = Convert.ToString(dr["Image_Path"]);
这句话有什么作用? 它将每个 image path
值分配给一个 Image.ImageUrl
。 因此, Image.ImageUrl
将保存最后指定的image path
。 结果只显示一张图片。 这不是你想要的。
你想要的是:显示所有图片 – >为每个 Image.ImageUrl
分配每个 image path
– > 动态创建Image
并将其添加到表单 。 因此,您应该执行以下操作,而不是编写该语句:
Image img = new Image(); img.ImageUrl = dr["Image_Path"].ToString(); img.AlternateText = "Test image"; form1.Controls.Add(img);
代码未经过测试 。 只关注这个想法。 您可以这样做,或使用repeater
,或您自己的方式,这取决于您。
如果你发现一些不清楚的东西,请随时问我:)
您可以使用控件根据需要使用自定义样式显示图像
1)很明显,你不能将多个图像显示在一个HTML对象中。 您必须根据要在页面上显示它的方式使用Repeater
, GridView
或DataGrid
或动态HTML生成(即HTML设计)
2)正确地遵循ASP.NET页面生命周期事件(在您完成初始化Repeater
, Gridview
或Datagrid
,您可以在PageLoad()
事件中编写代码)
3)你也可以显示video,但为此你需要一些播放器,它不会那么简单(你可以使用第三方工具)
我修改了你的代码以使它工作。 而是在aspx中定义图像,从后面的代码中动态添加它。
您修改的ASP.NET代码:
您修改的C#代码:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data.SqlClient; using System.Data; using System.Configuration; namespace Blog { public partial class index : System.Web.UI.Page { SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["blogconnection"].ToString()); protected void Page_Load(object sender, EventArgs e) { con.Open(); string allimage; string qry="select * from images"; SqlCommand cmd = new SqlCommand(qry, con); SqlDataReader dr =cmd.ExecuteReader(); if (dr.HasRows) { while(dr.Read()) { if (!string.IsNullOrEmpty(Convert.ToString(dr["Image_Path"]))) { Image img = new Image(); img.ImageUrl = dr["Image_Path"].ToString(); img.AlternateText = dr["Image_Path"].ToString(); form1.Controls.Add(img); } } } con.Close(); } } }
我在这里添加了一些屏幕截图,希望你能从这里继续。