2013-08-28 27 views
0

我有下面的DataGrid这没有问题显示DataGrid列是根据列值超链接栏

<asp:DataGrid ID="fileBrowserGrid" runat="server" Width="100%" PageSize="14" AllowPaging="True" 
     CellPadding="1" GridLines="None" BorderColor="#636E92" BorderWidth="0px" AutoGenerateColumns="False" 
     OnPageIndexChanged="fileBrowserGrid_PageIndexChanged"> 
     <AlternatingItemStyle CssClass="mainbodytextalt"></AlternatingItemStyle> 
     <ItemStyle CssClass="metadatabodytext"></ItemStyle> 
     <HeaderStyle CssClass="metadatabodytitle"></HeaderStyle> 
     <FooterStyle CssClass="Blue"></FooterStyle> 
     <Columns> 
      <asp:BoundColumn DataField="LoadedFileID" HeaderText="Loaded File Id" Visible="False"></asp:BoundColumn> 
      <asp:BoundColumn DataField="DataSupplierCode" HeaderText="Data Supplier Code"></asp:BoundColumn> 
      <asp:BoundColumn DataField="DataSupplierName" HeaderText="Data Supplier Name"></asp:BoundColumn> 
      <asp:BoundColumn DataField="Filename" HeaderText="File Name"></asp:BoundColumn> 
      <asp:BoundColumn DataField="DateLoaded" HeaderText="Date Loaded"></asp:BoundColumn> 
      <asp:BoundColumn DataField="LoadStatus" HeaderText="Status"></asp:BoundColumn> 
     </Columns> 
     <PagerStyle CssClass="Gray"></PagerStyle> 
</asp:DataGrid> 

代码后面的工作原理:

DataSet dataSet = results.DataSet; 
this.fileBrowserGrid.DataSource = dataSet; 
this.fileBrowserGrid.DataBind(); 

我想改变状态栏,使意志如果值为'失败',则显示超链接到id为querystring值的errormessage.aspx,但如果其他任何内容保持为正常文本值,则超链接。

理想我不想让

我一直在寻找RowDataBind,但一直没能得到那个工作改变我的存储过程。

任何想法?谢谢!

回答

2

我有一个解决方案,只有在ASPX,不碰CS后端

可以预测呈现模板列的。试试这个 我想代码状态表明失败是“失败”

<asp:TemplateColumn> 
       <HeaderTemplate> 
        <b>Status </b> 
       </HeaderTemplate> 
       <ItemTemplate> 
        <asp:PlaceHolder ID="Ok" runat="server" Visible='<%# (Eval("LoadStatus").ToString()=="Failed"?false:true) %>'><%----%> 
         <asp:Label ID="Label1" Text='<%# Eval("LoadStatus") %>' runat="server" /> 
        </asp:PlaceHolder> 
        <asp:PlaceHolder ID="Ko" runat="server" Visible='<%# (Eval("LoadStatus").ToString()=="Failed"?true:false) %>'><%----%> 
         <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# string.Format("DataLoaderErrorMessage.aspx?id={0}",Eval("LoadedFileID"))%>'><%# Eval("LoadStatus") %></asp:HyperLink> 
        </asp:PlaceHolder> 
       </ItemTemplate> 
      </asp:TemplateColumn> 
+0

谢谢你的回应。这几乎可以工作,因为它创建字符串okbut它似乎不读取LoadStatus值,因为发生的所有情况都是纯文本显示为对于标签默认为true,对于超链接为false – ConfusedShark

+0

对不起,我是法语我的英语不流利。我不明白发生了什么事。 这是你的问题的这部分代码? (Eval(“LoadStatus”)==“failed”?false:true)%> – tdelepine

+0

我知道它的工作原理以及所有缺少的.ToString()在Eval之后(“LoadStatus”)。我已更新您的答案以显示此内容,并标记为答案正确。谢谢。 – ConfusedShark

0

1)将datagrid的AutoGenerateColumns属性设置为false。 2)为状态创建模板列而不是绑定列。 3)为每列设置'DataField'属性(除了模板列),以便他们知道从sql数据源显示哪个值。 4)编辑模板列,并通过所有行设置在GridView的数据源后,有添加HTML DIV id为divStatus

<asp:TemplateField HeaderText="Status"> 
     <ItemTemplate> 
      <div id="divStatus" runat="server"> 
      </div> 
     </ItemTemplate> 
</asp:TemplateField> 

迭代,做一些像下面这样。

for(int i = 0; i < dataSet.Tables[0].Rows.Count; i++) 
      { 
       HtmlGenericControl divStatus = (HtmlGenericControl)fileBrowserGrid.Rows[i].FindControl("divStatus"); 

       if(dataSet.Tables[0].Rows[i]["LoadStatus"].ToString() != "Failed") 
        divStatus.InnerHtml = dataSet.Tables[0].Rows[i]["LoadStatus"].ToString(); 
       else 
        divStatus.InnerHtml = "<a href='pageURL.aspx?ID=" + dataSet.Tables[0].Rows[i]["LoadedFileID"].ToString() + "'> Failed : " + dataSet.Tables[0].Rows[i]["LoadedFileID"].ToString() + "</a>"; 
      } 
+0

感谢您的回复。这看起来像它可以工作,但对于GridView而不是DataGrid(它的旧网站)。我可能会更新,如果我也一样,但现在要避免使用css – ConfusedShark