2011-02-26 5 views
2

У меня есть следующее сообщение об ошибке DataList внутри UpdatePanel, которое обновляется всякий раз, когда выбор сделан из меню DropDown.
Однако, если ничего не получено из таблицы db, я получаю пустой раздел.Вопрос DataList

То, что я хотел бы сделать, это показать ту же таблицу, которая находится внутри ItemTemplate вместе с текстом - то есть «Администратор не найден», «E-mail не найден» .... и т.д. для EmptyDataTempate ...
Я Я заметил, что EmptyDataTemplate не существует для DataList, но я не хочу использовать другой элемент управления.

Есть ли способ сделать это? Пример кода оценен. Благодаря!

<asp:DataList ID="DataList" runat="server"> 
    <ItemTemplate> 
     <table> 
      <tr> 
       <td class="style1"> 
        Company Admin: 
       </td> 
       <td> 
        <asp:TextBox Text='<%# Eval("CompanyAdmin") %>' CssClass="input input1" ID="co_admin" 
         Width="150" runat="server" ReadOnly="True" /> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        Admin Email: 
       </td> 
       <td> 
        <asp:TextBox Text='<%# Eval("AdminEmail") %>' CssClass="input input1" ID="ad_email" 
         Width="150" runat="server" ReadOnly="True" /> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        Company Email: 
       </td> 
       <td> 
        <asp:TextBox Text='<%# Eval("CompanyEmail") %>' CssClass="input input1" ID="co_email" 
         Width="150" runat="server" ReadOnly="True" /> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        Telephone: 
       </td> 
       <td> 
        <asp:TextBox Text='<%# Eval("Telephone") %>' CssClass="input input1" ID="telephone" 
         Width="150" runat="server" ReadOnly="True" /> 
       </td> 
      </tr> 
      <tr> 
       <td> 
       </td> 
       <td> 
       </td> 
      </tr> 
     </table> 
    </ItemTemplate> 
</asp:DataList> 

ответ

0

Вы можете добавить простую функцию, которая возвращает сообщение об ошибке, если поле равно null.

Вы вызываете функцию как

<%#GetWithMsg(Container.DataItem, "CompanyEmail", "e-mail n/a")%> 

, например

<asp:TextBox Text='<%# GetWithMsg(Container.DataItem, "CompanyEmail", "e-mail n/a") %>' CssClass="input input1" ID="co_email" 
        Width="150" runat="server" ReadOnly="True" /> 

и код позади.

protected string GetWithMsg(object oItem, string cField, string TheMsg) 
{ 
    var TheData = DataBinder.Eval(oItem, cField); 

    if(TheData == null) 
     return TheMsg; 
    else 
     return TheData.ToString(); 
} 
+0

Я пытался добавить свой код, и это не делает разницы по какой-то причине :(Это все еще извлекая значения, но не отображает string, когда null. Что может быть причиной этого? Я использую панель обновления, поэтому мне нужно добавить какой-либо код в выбранном индексе вывода в раскрывающемся списке, когда происходит привязка? – user618616

+0

@ user618616 может быть не пустым, но пустым, проверьте также, если ToString() .Lenght == 0 (также вы можете использовать string.IsNullOrE mpty() – Aristos

+0

Хм ... пока не отображаются сообщения. – user618616

0

не проверял, но Mybe вы можете попробовать

'<%# !string.IsNullOrEmpty(Eval("CompanyEmail").ToString()) ? Eval("CompanyEmail") : "Email Not Found" %>' 

явное приведение может быть лучше с точки зрения производительности, чем Eval хотя например

'<%# !string.IsNullOrEmpty(((System.Data.DataRowView)Container.DataItem)["CompanyEmail"].ToString()) ? ((System.Data.DataRowView)Container.DataItem)["CompanyEmail"].ToString() : "Email Not Found" %>' 

надежда Итл помочь

Sample Edit:

protected void BindData() 
{ 
    DataTable dt = DAL.GetData(... 
    if(dt.Rows.Count == 0) 
    { 
     dt.Rows.Add(dt.NewRow()); 
    } 
    DataList.DataSource = dt; 
    DataList.DataBind(); 
} 
+0

Ничего не работает по какой-то причине ... есть ли другой способ, которым вы можете это сделать? Заранее спасибо! – user618616

+0

Извините, не заметил этого утверждения «Однако, если ничего не извлекается из таблицы db, я получаю пустой раздел», это означает, что мы не связываем какие-либо данные, просто проверяем datatable перед привязкой и добавляем пустую строку, если необходимо, например. if (dt.Rows.Count == 0) {dt.Rows.Add (dt.NewRow());} – Adam

Смежные вопросы