【问题标题】:Like and Dislike button in Gridview. How to implement?Gridview 中的“喜欢”和“不喜欢”按钮。如何实施?
【发布时间】:2014-03-17 17:38:27
【问题描述】:

我有一个显示用户反馈的网格视图。每行都有一些按钮,例如“喜欢”和“不喜欢”,每个按钮都会触发带有特定命令名和命令参数的 gridview RowCommand 事件。

如果用户单击“赞”按钮,它应该禁用“赞”按钮并保持“不赞”按钮处于启用状态。如果用户改变主意并单击不喜欢按钮,它应该禁用不喜欢按钮并启用喜欢按钮等等。有什么想法吗?

我试过了,没有运气

protected void BtnLike_Click(object sender, EventArgs e)
{
    Button thumbs_up = (Button)sender;
    thumbs_up.Enabled = false;

    Button thumbs_down = (Button)sender;
    thumbs_down.Enabled = true;
}

protected void btnDislike_Click(object sender, EventArgs e)
{
    Button thumbs_down = (Button)sender;
    thumbs_down.Enabled = false;

    Button thumbs_up = (Button)sender;
    thumbs_up.Enabled = true;
}

aspx 代码

<asp:GridView ID="GridViewFeedback" runat="server" CellPadding="4" ForeColor="#333333"
                        GridLines="None" AutoGenerateColumns="False" DataKeyNames="ItemID" AllowPaging="True"
                        AllowSorting="True" DataSourceID="SqlDataSource1" OnRowCommand="GridViewFeedback_RowCommand"
                        Width="100%" OnRowDataBound="GridViewFeedback_RowDataBound">
                        <AlternatingRowStyle BackColor="White" />
                        <Columns>                              
                            <asp:TemplateField HeaderText="Item Description" SortExpression="ItemDesc">                                   
                                <ItemTemplate>
                                    <asp:Label ID="lblDesc" runat="server" Text='<%# Bind("ItemDesc") %>'></asp:Label>
                                </ItemTemplate>
                                <ItemStyle HorizontalAlign="Left" />
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Like" InsertVisible="False" SortExpression="Vote">
                                <ItemTemplate>
                                    <asp:Button ID="BtnLike_Click" runat="server" Text="Like" CommandName="VoteUp" OnClick="BtnLike_Click_Click"
                                        CommandArgument='<%# Bind("ItemID") %>' />
                                </ItemTemplate>
                                <ItemStyle HorizontalAlign="Center" />
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Dislike" InsertVisible="False" SortExpression="Vote">
                                <ItemTemplate>
                                    <asp:Button ID="btnDislike_Click" runat="server" Text="Dislike" CommandName="VoteDown" OnClick="btnDislike_Click_Click"
                                        CommandArgument='<%# Bind("ItemID") %>' />
                                </ItemTemplate>
                                <ItemStyle HorizontalAlign="Center" />
                            </asp:TemplateField>

                    </asp:GridView>

【问题讨论】:

  • 首先,检索你的行索引,然后获取另一个按钮并更新它的状态
  • @GabrielGM 我该怎么做?我对此很陌生。

标签: c# asp.net


【解决方案1】:

首先,你需要知道你在哪一行,然后在这一行做你需要的:

void GridViewFeedback_RowCommand(Object sender, GridViewCommandEventArgs e)
{
    GridViewRow gvr = (GridViewRow)(((Control)e.CommandSource).NamingContainer);
    Button btnUp = gvr.FindControl("BtnLike_Click");
    Button btnDown = gvr.FindControl("btnDislike_Click");

    if(e.CommandName == "VoteUp")
    {
        btnUp.Enabled = false;
        btnDown.Enabled = true;
    }
    else if(e.CommandName == "VoteDown")
    {
        btnUp.Enabled = true;
        btnDown.Enabled = false;
    }
}    

确保您处理GridViewRowCommand 事件!

免责声明:我没有测试过代码,所以它们可能是语法错误..

【讨论】:

  • e.FindControl 在 RowCommand 中不起作用,它说缺少程序集参考
  • 哎呀!抱歉,应该是gridviewrow! (更正的代码)
【解决方案2】:

你可以试试这个

protected void BtnLike_Click_Click(object sender, EventArgs e)
    {


        GridViewRow row = (GridViewRow)((Button)sender).NamingContainer;
        Button BtnLike_Click = (Button)row.FindControl("BtnLike_Click");
        Button btnDislike_Click = (Button)row.FindControl("btnDislike_Click");
        BtnLike_Click.Enabled = false;
        btnDislike_Click.Enabled = true;
    }

    protected void btnDislike_Click_Click(object sender, EventArgs e)
    {
        GridViewRow row = (GridViewRow)((Button)sender).NamingContainer;
        Button BtnLike_Click = (Button)row.FindControl("BtnLike_Click");
        Button btnDislike_Click = (Button)row.FindControl("btnDislike_Click");
        BtnLike_Click.Enabled = true ;
        btnDislike_Click.Enabled = false ;
    }

【讨论】:

    【解决方案3】:

    这行得通。

    protected void ButtonLike_Click_Click(object sender, EventArgs e)
    {
        GridViewRow row = (GridViewRow)((Button)sender).NamingContainer;
        Button ButtonLike_Click = (Button)row.FindControl("ButtonLike_Click");
        Button ButtonDislike_Click = (Button)row.FindControl("ButtonDislike_Click");
        ButtonLike_Click.Enabled = false;
        ButtonDislike_Click.Enabled = true;
    }
    
    protected void ButtonDislike_Click_Click(object sender, EventArgs e)
    {
        GridViewRow row = (GridViewRow)((Button)sender).NamingContainer;
        Button ButtonLike_Click = (Button)row.FindControl("ButtonLike_Click");
        Button ButtonDislike_Click = (Button)row.FindControl("ButtonDislike_Click");
        ButtonLike_Click.Enabled = true ;
        ButtonDislike_Click.Enabled = false ;
    }
    

    【讨论】:

    • 请尝试解释有问题的代码有什么问题,而不仅仅是提供工作代码。
    猜你喜欢
    • 2016-04-04
    • 2012-09-20
    • 2014-09-21
    • 1970-01-01
    • 2019-07-03
    • 2020-11-04
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多