如何显示标题行列表视图是否有数据?

时间:2012-06-26 08:12:26

标签: asp.net c#-4.0 listview

我有一个列表视图,我想在其中添加一个标题行,当列表视图有数据时,它会出现。在我希望它的每一个条件。我已经使用LayOut模板这样做,但只有当listview有数据时它才会显示Header行。然后我尝试了EmptydataTemplate,它显示了标题行,但现在它的按钮不起作用。 我的代码是

<asp:UpdatePanel ID="upViewSchedule" runat="server">
        <ContentTemplate>
            <asp:ListView ID="lstuser" runat="server" ItemPlaceholderID="trItem" DataKeyNames="id"
                OnItemDataBound="lstuser_ItemDataBound">
                <LayoutTemplate>
                    <table cellspacing="0">
                        <tr class="hdrRowColor1">
                            <td align="left">
                                &nbsp;name
                            </td>
                            <td align="left">
                                salary
                            </td>
                            <td align="left">
                                address
                            </td>
                            <td align="left" style="border-right: 1px solid #6398cc">
                                Actions
                            </td>
                        </tr>
                        <tr class="OddRowColor">
                            <td align="left">
                                <asp:DropDownList ID="drphdrname" runat="server" Width="120px">
                                </asp:DropDownList>
                                <ajaxCtrl:CascadingDropDown ID="csddrphdrName" runat="server" TargetControlID="drpname"
                                    Category="Name" ServicePath="~/Resources/WebService.asmx" ServiceMethod="GetName">
                                </ajaxCtrl:CascadingDropDown>
                            </td>
                            <td>
                                <asp:TextBox ID="txtaddress" runat="server" Width="110px"></asp:TextBox>
                            </td>
                            <td width="50px" class="last">
                                <asp:ImageButton ID="imgBtnHdrAdd" runat="server" ImageUrl="~/App_Themes/ThemeNew/Images/add_new.png"
                                    OnClick="imgBtnHdrAdd_Click" ToolTip="Add user." />
                            </td>
                        </tr>
                        <tr id="trItem" runat="server">
                        </tr>
                    </table>
                </LayoutTemplate>
                <ItemTemplate>
                    <tr class='<%# Convert.ToBoolean(Container.DataItemIndex % 2) ? "OddRowColor" : "EvenRowColor" %>'>
                        <td align="left" width="138px">
                            <asp:DropDownList ID="drpname" runat="server" Width="120px">
                            </asp:DropDownList>
                            <asp:Label ID="lblCreatedBY" Text='<%# Eval("CreatedBy") %>' runat="server" Visible="false"></asp:Label>
                            <asp:Label ID="lblId" runat="server" Visible="false"></asp:Label>
                            <ajaxCtrl:CascadingDropDown ID="casddrpContacts" runat="server" TargetControlID="drpname"
                                Category="name" ServicePath="~/Resources/WebService.asmx" ServiceMethod="Getuser">
                            </ajaxCtrl:CascadingDropDown>
                        </td>
                        <td align="left" width="138px">
                            <asp:TextBox ID="TextBox1" runat="server" Text='<%# Eval("salary") %>' Width="110px"></asp:TextBox>
                        </td>
                        <td align="left" width="138px">
                            <asp:TextBox ID="TextBox2" runat="server" Text='<%# Eval("address") %>' Width="110px"></asp:TextBox>
                        </td>
                        <td align="left" class="last">
                            <asp:ImageButton ID="imgBtnEdit" runat="server" ImageUrl="~/App_Themes/ThemeNew2/images/update.png"
                                CommandArgument='<%# Eval("id") %>' OnClick="imgBtnEdit_Click" ToolTip="Update user" />
                            <asp:ImageButton ID="imgBtnDelete" runat="server" ImageUrl="~/App_Themes/ThemeNew/Images/delete.png"
                                CommandArgument='<%# Eval("id") %>' OnClientClick="return confirm('Are you sure you want to delete this user ?');"
                                ToolTip="Delete user" OnClick="imgBtnDelete_OnClick" />
                        </td>
                    </tr>
                </ItemTemplate>
                <EmptyDataTemplate>
                    <table cellspacing="0">
                        <tr class="hdrRowColor1">
                            <td align="left">
                                &nbsp;name
                            </td>
                            <td align="left">
                                salary
                            </td>
                            <td align="left">
                                address
                            </td>
                            <td align="left" style="border-right: 1px solid #6398cc">
                                Actions
                            </td>
                        </tr>
                        <tr class="OddRowColor">
                            <td align="left">
                                <asp:DropDownList ID="drphdrname" runat="server" Width="120px">
                                </asp:DropDownList>
                                <ajaxCtrl:CascadingDropDown ID="csddrphdrName" runat="server" TargetControlID="drpname"
                                    Category="Name" ServicePath="~/Resources/WebService.asmx" ServiceMethod="GetName">
                                </ajaxCtrl:CascadingDropDown>
                            </td>
                            <td>
                                <asp:TextBox ID="txtaddress" runat="server" Width="110px"></asp:TextBox>
                            </td>
                            <td width="50px" class="last">
                                <asp:ImageButton ID="imgBtnHdrAdd" runat="server" ImageUrl="~/App_Themes/ThemeNew/Images/add_new.png"
                                    OnClick="imgBtnHdrAdd_Click" ToolTip="Add user." />
                            </td>
                        </tr>
                        <tr id="trItem" runat="server">
                        </tr>
                    </table>
                </EmptyDataTemplate>
            </asp:ListView>
        </ContentTemplate>
    </asp:UpdatePanel>

代码背后的代码是

 protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        BIndAddress();
        // BindRoleDrop();
        drpAddress.Items.Insert(0, new ListItem("Select Area", ""));
        drpRoom.Items.Insert(0, new ListItem("Select Room", ""));
        ViewState["sortCol"] = "tblUser.id";
        ViewState["sortDir"] = "Desc";
        ViewState["nmbr"] = 1;
        BindData(ViewState["sortCol"].ToString(), ViewState["sortDir"].ToString(), Convert.ToInt32(ViewState["nmbr"]), 7999);

    }
    else
    {
        lblMessage.Visible = false;

    }

}

还有一件事请告诉我如何对这些进行验证。

1 个答案:

答案 0 :(得分:0)

我在当地进行了一些测试。我发现如果我在EmptyDataTemplate中有一个按钮,只要在事件触发前不修改ListView的状态,它的OnClick事件就会按预期触发。

因此我猜你有一些代码可以修改ListView的状态(例如重新绑定它),它在相关按钮的imgBtnHdrAdd_Click事件处理程序之前运行。

Page_Load方法可能是主要的嫌疑人,但根据您的代码,它正在检查!IsPostBack

我假设它是BindData的调用,用于设置ListView的数据绑定。在调用该方法的代码后面查找代码中的其他位置,并验证在按钮的事件处理程序之前没有运行这些位置。