【问题标题】:DataList Question数据列表问题
【发布时间】:2011-02-26 16:44:16
【问题描述】:

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

我想做的是显示 ItemTemplate 内的同一张表以及文本 - 即 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>

【问题讨论】:

    标签: c# asp.net datalist


    【解决方案1】:

    您可以添加一个简单的函数,如果该字段为空,则返回一个 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();
    }
    

    【讨论】:

    • 我尝试添加您的代码,但由于某种原因它没有产生任何影响 :( 它仍在检索值,但在 null 时不显示字符串。可能是什么原因造成的?我正在使用更新面板,那么我需要在绑定发生时在 selectedindexchange od 下拉列表中添加任何代码吗?
    • @user618616 可能不为空但为空,请检查 ToString().Lenght == 0 (也可以使用 string.IsNullOrEmpty()
    • 嗯...仍然不显示消息。
    • 上面的代码看起来不错,也许您需要强制更新该 UpdatePanel(取决于您如何设置控件层次结构)。试试 mYUpdatePanel.Update() 。
    【解决方案2】:

    未测试,但你可以尝试

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

    【讨论】:

    • 由于某种原因没有任何效果...您还有其他方法可以考虑这样做吗?提前致谢!
    • span class="comcopy">对不起,没有注意到“但是,如果从 db 表中没有检索到任何内容,我会得到一个空白部分”,这意味着我们不绑定任何数据,只是在绑定之前测试数据表并添加一个如果需要,空行,例如if (dt.Rows.Count == 0) {dt.Rows.Add(dt.NewRow());}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    相关资源
    最近更新 更多