数据列表问题

时间:2011-02-26 16:44:16

标签: c# asp.net datalist

我在DataList中有以下数据绑定UpdatePanel,只要从DropDown菜单中进行选择,就会更新。 但是,如果没有从db表中检索到任何内容,我会得到一个空白部分。

我想要做的是显示ItemTemplate内的同一个表格以及文本 - 即'找不到管理员','找不到电子邮件'......等等,用于EmptyDataTempate ...
我注意到DataList不存在EmptyDataTemplate,但我不想使用不同的控件。

有办法做到这一点吗?示例代码表示赞赏谢谢!

<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 :(得分:0)

如果字段为null,您可以添加一个返回msg的简单函数。

你调用类似

的函数
<%#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();
}

答案 1 :(得分:0)

未经测试但也许您可以尝试

'<%# !string.IsNullOrEmpty(Eval("CompanyEmail").ToString()) ? Eval("CompanyEmail") : "Email Not Found" %>'
但是,就性能而言,显式转换可能比eval更好 e.g。

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