DataList Вопрос - PullRequest
       8

DataList Вопрос

2 голосов
/ 26 февраля 2011

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

То, что я хотел бы сделать, это отобразить ту же таблицу, которая находится внутри ItemTemplate вместе с текстом - то есть «Admin Not Found», «Email Not Found» .... и т. Д. Для 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>

Ответы [ 2 ]

0 голосов
/ 26 февраля 2011

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

'<%# !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" %>'

надеюсь, это поможет

Пример редактирования:

protected void BindData()
{
    DataTable dt = DAL.GetData(...
    if(dt.Rows.Count == 0)
    {
        dt.Rows.Add(dt.NewRow());
    }
    DataList.DataSource = dt;
    DataList.DataBind();
}
0 голосов
/ 26 февраля 2011

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

Вы вызываете функцию, подобную

<%#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();
}
...