Asp.net 字段为空时隐藏gridview中的按钮
我有一个网格视图,其中一些行附有图片。当我按下按钮2时,我从sql记录中提取信息,关于服务器上哪个文件夹有图片。 这已经起作用了,但我无法使按钮仅在已附加图像文件夹的行中可见 我在谷歌上搜索了很长一段时间,找到了与以下类似的不同解决方案,但我无法让它发挥作用。 我做错了什么Asp.net 字段为空时隐藏gridview中的按钮,asp.net,button,gridview,visible,itemtemplate,Asp.net,Button,Gridview,Visible,Itemtemplate,我有一个网格视图,其中一些行附有图片。当我按下按钮2时,我从sql记录中提取信息,关于服务器上哪个文件夹有图片。 这已经起作用了,但我无法使按钮仅在已附加图像文件夹的行中可见 我在谷歌上搜索了很长一段时间,找到了与以下类似的不同解决方案,但我无法让它发挥作用。 我做错了什么 <asp:SqlDataSource ID="SqlDSodinRSSfeb" runat="server" ConnectionString="<%$ ConnectionStrings:hernin
<asp:SqlDataSource ID="SqlDSodinRSSfeb" runat="server"
ConnectionString="<%$ ConnectionStrings:herning_brand_dk_dbConnectionString %>"
SelectCommand="SELECT PubDateTime, Melding, Station, PhotoFolder FROM OdinRSS ">
</asp:SqlDataSource>
<asp:GridView ID="GridView14" runat="server" DataSourceID="SqlDSodinRSSfeb"
AutoGenerateColumns="False" Width="500px" OnRowCommand="Button_RowCommand" >
<Columns>
<asp:BoundField DataField="PubDateTime" HeaderText="Tidspunkt" />
<asp:BoundField DataField="Melding" HeaderText="Melding for udkaldet" />
<asp:BoundField DataField="Station" HeaderText="Station" />
<asp:TemplateField HeaderText="Foto" >
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("PhotoFolder") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Button ID="Button2" runat="server" Text="Foto" Visible='<%# Eval("PhotoFolder") != "Null" %>'
CommandName="ButtonClick" CommandArgument='<%# Eval("PhotoFolder") %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
我的.cs
protected void Button_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandArgument != null)
{
switch (e.CommandName)
{
case "ButtonClick":
{
int Folder = Convert.ToInt32(e.CommandArgument);
PhotoList(Folder);
}
break;
}
}
}
void PhotoList(int FolderNumber)
{
var imagePaths = Directory.GetFiles(Server.MapPath("PhotoFolder\\" + FolderNumber));
var imageNames = new string[imagePaths.Length];
for (int i = 0; i < imagePaths.Length; i++)
{
imageNames[i] = imagePaths[i].Substring(imagePaths[i].LastIndexOf("\\") + 1);
}
var dt = new DataTable();
dt.Columns.Add("ImageName", typeof(string));
dt.Columns.Add("ImagePath", typeof(string));
foreach (var imgName in imageNames)
{
DataRow dr = dt.NewRow();
dr["ImageName"] = RemoveExtension(imgName);
dr["ImagePath"] = "PhotoFolder/" + FolderNumber + "/" + imgName;
dt.Rows.Add(dr);
}
DataList1.DataSource = dt;
DataList1.DataBind();
}
string RemoveExtension(string imgName)
{
return imgName
.Replace(".jpg", "")
.Replace(".png", "");
}
protectedvoid按钮\u行命令(对象发送方,GridViewCommandEventArgs e)
{
if(e.CommandArgument!=null)
{
开关(例如CommandName)
{
案例“按钮点击”:
{
int Folder=Convert.ToInt32(e.CommandArgument);
照片列表(文件夹);
}
打破
}
}
}
无效照片列表(int FolderNumber)
{
var imagepath=Directory.GetFiles(Server.MapPath(“PhotoFolder\\”+FolderNumber));
var imageNames=新字符串[imagepath.Length];
for(int i=0;i
sql字段“PhotoFolder”是一个nvarchar(50)。如果记录中有照片,则字段中有一个从100到100的数字,该数字将重新生成包含照片的文件夹。如果记录没有照片,则字段包含“Null”
我也尝试过:
<asp:Button ID="Button2" runat="server" Text="Foto" Visible='<%# Eval("PhotoFolder").ToString() != "Null" %>'
根据您的问题,您应该编写检查包含图像的行的代码,
您可以在RowDatabound事件中编写代码,并在不包含图像的行上将按钮的visible属性设置为false。您只需在GridView RowDatabound事件中执行即可。
试试这个
加价
Visible='<%# HideEmptyPhotoFolder(Eval("PhotoFolder")) %>'
它可以通过简单的内联代码实现
<asp:ImageButton ID="ibtnBranchType1" runat="server" ImageUrl='<%# "~/images/" + Eval("branchtype1")+".png" %>' Visible='<%# Convert.ToString(Eval("branchtype1"))=="" ? false : true %>' Height="20px"/>
这里Eval(“branchtype1”)我们从数据表(如1、2、3等)中获取id值,我们的图像文件夹由图像(如1.png、2.png、3.png等)组成
Visible='<%# Convert.ToString(Eval("branchtype1"))=="" ? false : true %>'
Visible=''
若该值不包含任何id,它将得到null。我们将使用三元运算符将其与空字符串进行比较。您所描述的很好,但实际上它可以缩短得更多。它还以以下方式工作,不使用代码隐藏:Visible=''谢谢@瑟伦金德尔斯科夫:如果对象Eval返回的值为null怎么办。我只是选择了一种有效的方法。需要更多可读性:)
Visible='<%# Convert.ToString(Eval("branchtype1"))=="" ? false : true %>'