C# 如何在GridView中添加相似/不同的功能?

C# 如何在GridView中添加相似/不同的功能?,c#,asp.net,sql-server-2008,C#,Asp.net,Sql Server 2008,如果我在数据库中手动输入like的值,那么我可以在墙上查看它,但我不知道如何在单击“like”时以编程方式插入值。 单击“like”(在msg下面的每一行中)时,我希望触发的查询是“插入tbl_like(ScrapId,FromId,LikeStatus)值(A*,sessionserid,1)” A*=这必须是单击like的特定行的Scrapid 数据库表: 废料表: ScrapId | FromId | ToId | msg 如表所示: LikeId | ScrapId | FromId |

如果我在数据库中手动输入like的值,那么我可以在墙上查看它,但我不知道如何在单击“like”时以编程方式插入值。 单击“like”(在msg下面的每一行中)时,我希望触发的查询是
“插入tbl_like(ScrapId,FromId,LikeStatus)值(A*,sessionserid,1)”

A*=这必须是单击like的特定行的Scrapid

数据库表: 废料表: ScrapId | FromId | ToId | msg

如表所示:

LikeId | ScrapId | FromId | LikeStatus

源代码:

   <asp:GridView ID="GridViewUserScraps" ItemStyle-VerticalAlign="Top" AutoGenerateColumns="False"
                GridLines="None" Width="100%" ShowHeader="False" runat="server" AlternatingRowStyle-BackColor="#A5A5A5"
                CellPadding="4" ForeColor="#333333" DataKeyNames="ScrapId" 
                OnItemCommand="CommandLinkClicked">
                <Columns>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <table align="left" cellpadding="1" cellspacing="2">
                                <tr>
                                    <td>
                                        <a href='<%#getUserHREF(Container.DataItem)%>'>
                                            <img align="middle" src='<%#getSRC(Container.DataItem)%>' border="0" width="50px" /></a>
                                    </td>
                                    <td>
                                        &nbsp;</td>
                                </tr>
                            </table>
                            <div align="justify">
                                <%#DataBinder.Eval(Container.DataItem, "Message")%>
                                <br />
                                <br />
                            </div>
                            <span class="SmallBlackText">Posted On: &nbsp;</span>
                            <asp:Label ID="lblSendDate" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"SendDate")%>'></asp:Label>
                            </span>
                            <br />
                           <%-- <asp:LinkButton ID="lnklike" runat="server" 
                                CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" 
                                CommandName="LikeCmd">Like</asp:LinkButton>
                            &nbsp;&nbsp;&nbsp;
                            <asp:LinkButton ID="lnkunlike" runat="server">unlike</asp:LinkButton>--%>

                            <asp:LinkButton ID="lnklike" runat="server" CommandName="like" CommandArgument='<%# Eval("ScrapId")%>'>Like</asp:LinkButton>
    <asp:LinkButton ID="lnkunlike" runat="server"  CommandName="unlike" CommandArgument='<%# Eval("ScrapId")%>'>unlike</asp:LinkButton>



                            &nbsp;&nbsp;
                            <asp:Label ID="lbllike" runat="server" Text="likes:"></asp:Label>
                           <%-- <asp:Label ID="lbllikecount" runat="server" Text="0"></asp:Label>--%>


                        <asp:Label ID="Label1" runat="server" Text='<%# Controls_GetUserScraps.abc((int)Eval("ScrapId")) %>' />
                          <%--<asp:Label ID="Label1" runat="server" Text='<%# WebPageName.StaticMethodName((int)Eval("ScrapId")) %>' />--%>

                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
                <RowStyle BackColor="#EFF3FB" />
                <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
                <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
                <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                <EditRowStyle BackColor="#2461BF" />
                <AlternatingRowStyle BackColor="White" />
            </asp:GridView>



张贴于:
喜欢 不同于--%> 喜欢 不像 --%>
代码隐藏:

DataBaseClass dbClass = new DataBaseClass();
public DataTable dt;

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {

        GetUserScraps(int.Parse(Request.QueryString["Id"].ToString()));
    }
}
public void GetUserScraps(int Id)
{

    string getUserScraps = "SELECT u.Id as UserId,u.firstname,u.ImageName,s.FromId,s.ToId,s.Message,s.SendDate,s.ID as ScrapId FROM [User] as u, Scrap as s WHERE u.Id=s.FromId AND s.ToId='" + Request.QueryString["Id"].ToString() + "'";
  //string getlikes = "select COUNT(*) from tbl_like inner join Scrap on tbl_like.scrapid=Scrap.Id where tbl_like.likestatus=1 and tbl_like.scrapid='"+<%#DataBinder.Eval(Container.DataItem,"ScrapId")%>+"'";
  //  <%#DataBinder.Eval(Container.DataItem,"ScrapId")%>


    dt = dbClass.ConnectDataBaseReturnDT(getUserScraps);
    if (dt.Rows.Count > 0)
    {
        GridViewUserScraps.DataSource = dt;
        GridViewUserScraps.DataBind();
    }
}

public string getUserHREF(object sURL)
{
    DataRowView dRView = (DataRowView)sURL;
    string Id = dRView["UserId"].ToString();
    return ResolveUrl("~/UserDetails.aspx?Id=" + Id);
}

public string getSRC(object imgSRC)
{
    DataRowView dRView = (DataRowView)imgSRC;
    string ImageName = dRView["ImageName"].ToString();
    if (ImageName == "NoImage")
    {
        return ResolveUrl(@"~/Site_Images/image_missing.jpg");
    }
    else
    {
        return ResolveUrl("~/UserImage/" + dRView["ImageName"].ToString());
    }
}

public static int abc(int scrpid)
{

    string getlikes = "select COUNT(*) from tbl_like inner join Scrap on tbl_like.scrapid=Scrap.Id where tbl_like.likestatus=1 and tbl_like.scrapid='"+scrpid+"'";

    dboperation dbo = new dboperation();
    int a = dbo.GetLikesMethod(getlikes);

    return a;
}


protected void CommandLinkClicked(object sender, DataGridCommandEventArgs e)
{
    var scrapId = Int32.Parse(e.CommandArgument.ToString());
    switch (e.CommandName)
    {
        case "like":
            var con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["constr"].ConnectionString); //your connection string
            var cmd = new SqlCommand("insert into tbl_like (ScrapId,FromId,LikeStatus) values(@scrapId,@sessionUser,1)");
            cmd.Parameters.AddWithValue("@scrapId", scrapId);
            cmd.Parameters.AddWithValue("@sessionUser", Session["UserId"]);
            cmd.Connection = con;
            con.Open();
            cmd.ExecuteNonQuery();
            break;
        case "unlike":
            //do stuff
            break;
    }
}

}
DataBaseClass dbClass=newdatabaseclass();
公共数据表dt;
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!Page.IsPostBack)
{
GetUserScraps(int.Parse(Request.QueryString[“Id”].ToString());
}
}
public void GetUserScraps(int-Id)
{
string getUserScraps=“选择u.Id作为用户Id,u.firstname,u.ImageName,s.FromId,s.ToId,s.Message,s.SendDate,s.Id作为ScrapId从[User]作为u,s.Id作为s,其中u.Id=s.FromId和s.ToId=”+请求.QueryString[“Id”].ToString()+”;
//string getlikes=“从tbl_like.scrapid=scrape.Id上的tbl_like内部联接废料中选择计数(*),其中tbl_like.likestatus=1,tbl_like.scrapid='+'';
//  
dt=dbClass.ConnectDataBaseReturnDT(getUserScraps);
如果(dt.Rows.Count>0)
{
GridViewUserScraps.DataSource=dt;
GridViewUserScraps.DataBind();
}
}
公共字符串getUserHREF(对象sURL)
{
DataRowView dRView=(DataRowView)sURL;
string Id=dRView[“UserId”].ToString();
返回ResolveUrl(“~/UserDetails.aspx?Id=“+Id”);
}
公共字符串getSRC(对象imgSRC)
{
DataRowView dRView=(DataRowView)imgSRC;
字符串ImageName=dRView[“ImageName”].ToString();
if(ImageName==“NoImage”)
{
返回ResolveUrl(@“~/Site_Images/image_missing.jpg”);
}
其他的
{
返回ResolveUrl(“~/UserImage/”+dRView[“ImageName”].ToString());
}
}
公共静态int abc(int scrpid)
{
string getlikes=“从tbl_like.scrapid=scrape.Id上的tbl_like内部连接废料中选择计数(*),其中tbl_like.likestatus=1,tbl_like.scrapid='“+scrpid+”;
dboperation dbo=新的dboperation();
inta=dbo.GetLikesMethod(getlikes);
返回a;
}
受保护的void CommandLinkClicked(对象发送方,DataGridCommandEventArgs e)
{
var scrapId=Int32.Parse(例如,CommandArgument.ToString());
开关(例如CommandName)
{
案例“like”:
var con=new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings[“constr”].ConnectionString);//您的连接字符串
var cmd=new SqlCommand(“插入tbl_like(ScrapId,FromId,LikeStatus)值(@ScrapId,@sessionUser,1)”);
cmd.Parameters.AddWithValue(“@scrapId”,scrapId);
cmd.Parameters.AddWithValue(“@sessionUser”,Session[“UserId]”);
cmd.Connection=con;
con.Open();
cmd.ExecuteNonQuery();
打破
案例“不同”:
//做事
打破
}
}
}

您必须向网格中添加
OnItemCommand
事件来处理链接按钮的单击。另外,两个链接按钮必须设置
CommandName
CommandArgument

更改您的html,如下所示:

<asp:GridView .... OnRowCommand="GridViewRowCommand">

    <asp:LinkButton ID="lnklike" runat="server" CommandName="like" CommandArgument='<%# Eval("ScrapId")%>'>Like</asp:LinkButton>
    <asp:LinkButton ID="lnkunlike" runat="server"  CommandName="unlike" CommandArgument='<%# Eval("ScrapId")%>'>unlike</asp:LinkButton>

</asp:GridView>

你犯了什么错误?好吧,我按你说的做了,但是,当我点击“喜欢”时,什么也没发生。我应用了断点,但当我单击“喜欢”时,它只会将我带到页面顶部。查看我的编辑(代码隐藏)您缺少以下内容:
而且您的
命令名与我的不同,因此请将您的代码隐藏也更改(
case“like”
case“LikeCmd”
这是因为我复制粘贴了您的代码,而不是通过双击属性窗口上的事件来生成?您不必通过设计器生成该事件,只要将此
OnItemCommand=“CommandLinkClicked”
添加到网格标记:)如果您在代码中的事件处理程序中放置断点,就会发生什么事情?
protected void GridViewRowCommand(Object sender, GridViewCommandEventArgs e)
{
    var scrapId = Int32.Parse(e.CommandArgument.ToString());
    switch (e.CommandName)
    {
        case "like" : 
                using (var con = new SqlConnection("connection_string")) //your connection string
                {
                   var cmd = new SqlCommand("insert into tbl_like (ScrapId,FromId,LikeStatus) values(@scrapId,@sessionUser,1)");
                   cmd.Parameters.AddWithValue("@scrapId", scrapId);
                   cmd.Parameters.AddWithValue("@sessionUser", Session[User]); 
                   cmd.Connection = con;
                   con.Open();
                   cmd.ExecuteNonQuery();
                }
                break;
        case "unlike" : 
                //do stuff
                break;
    }
}