我有一個網格視圖,其中一些行已附加圖片。當我按下Button2時,我從sql記錄中獲取信息,瞭解服務器上哪個文件夾中有圖片。 這工作已經,但我不能讓按鈕僅在有圖像文件夾連接的行中可見。當字段爲空時,在gridview中隱藏按鈕
我搜索了很長時間,發現了類似於以下的不同解決方案,但是我無法使其工作。 我在做什麼錯?
<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", "");
}
在SQL字段 「PhotoFolder」 是一個爲nvarchar(50)。如果有記錄的照片,則該字段的數字爲100或更多,它會擦除包含照片的文件夾。如果沒有照片備案,該字段包含「空」
我也有嘗試:
<asp:Button ID="Button2" runat="server" Text="Foto" Visible='<%# Eval("PhotoFolder").ToString() != "Null" %>'
但是按鈕中的所有行,而不僅僅是那些有一個字符串顯示(數字)在「PhotoFolder」
你描述的工作正常,但實際上它可以縮短更多。 它也以如下方式工作,不使用Code-Behind:Visible ='<%#!String.IsNullOrEmpty(Eval(「PhotoFolder」)。ToString())%>'Thankyou! – 2013-02-15 12:06:53
@SørenGinderskov:如果Eval對象返回的值爲null,該怎麼辦?我只是選擇了其中一種方法。想要更多的可讀性:) – naveen 2013-02-15 12:40:40