2013-08-28 53 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