일부 행에 그림이 첨부 된 격자보기가 있습니다. Button2를 누르면 그림이있는 서버의 폴더에 대한 SQL 레코드에서 정보를 가져옵니다. 이 방법은 이미 작동하지만 버튼이 이미지 폴더가 연결된 행에만 표시되도록 할 수 없습니다.필드가 Null 인 경우 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"
당신이 묘사 한 내용은 문제가 없지만 실제로는 더 짧아 질 수 있습니다. 코드 비하인드를 사용하지 않고 다음과 같은 방식으로 작동합니다. Visible = '<% #! String.IsNullOrEmpty (Eval ("PhotoFolder"). ToString()) %>'Thankyou! –
@ SørenGinderskov : 개체 Eval이 반환되는 경우 null입니다. 방금 작동하는 방법 중 하나를 선택했습니다. 가독성을 더 원했습니다 :) – naveen