1

我有一个锚标记列表,单击时我希望将其 ID 属性的值发送到存储过程的参数。一切正常,除了我不知道如何使接受单击的属性的AddWithValue方法的第二个参数而不是对其进行硬编码。结果从一个简单的存储过程中读取,然后放入一个网格视图控件中ParametersSqlCommand

标记:

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeBehind="Default.aspx.cs" Inherits="jQueryEachExample._Default" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">




    <asp:HyperLink ID="Xtown" runat="server">Xtown</asp:HyperLink>
    <asp:HyperLink ID="Ztown" runat="server">Ztown</asp:HyperLink>
    <asp:HyperLink ID="Atown" runat="server">Atown</asp:HyperLink>
    <asp:HyperLink ID="Bburg" runat="server">Bburg</asp:HyperLink>

<asp:GridView runat="server" ID="stateGridView">

</asp:GridView>     

</asp:Content>

后面的代码

using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Data.SqlClient;
using System.Data;

namespace jQueryEachExample
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //let the connection string be read from the web.config file
            string cs = ConfigurationManager.ConnectionStrings["dbcs"].ConnectionString;

            //create a connection
            using (SqlConnection conn = new SqlConnection(cs))
            {
                //open connection
                conn.Open();
                //create the SqlCommand object
                SqlCommand cmd = new SqlCommand("spFindCityInfo", conn);
                cmd.CommandType = CommandType.StoredProcedure;
                //cmd.Parameters.AddWithValue("@cityName",this argument needs to be the id attribute of the link was that clicked
                cmd.Parameters.AddWithValue("@cityName", Xtown.ID);//Xtown.ID is what needs to be whatever is clicked
                //create a reader
                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    stateGridView.DataSource = reader;
                    stateGridView.DataBind();
                }


            }


        }
    }
}
4

3 回答 3

2

使用CommandArgumentaLinkButton

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.linkbutton.commandargument.aspx

于 2013-04-09T14:51:40.320 回答
1

我假设这些按钮将以更通用的方式创建,例如在中继器或其他东西中。

我建议将其更改HyperLinksLinkButtons以便您可以访问OnClick事件并将数据访问代码放入方法然后执行以下操作:-

<asp:LinkButton ID="Xtown" runat="server" OnClick="lnkButtonClick">Xtown</asp:LinkButton>

private void UpdateDB(string id)
{
     string cs = ConfigurationManager.ConnectionStrings["dbcs"].ConnectionString;

     using (SqlConnection conn = new SqlConnection(cs))
     {
        //*snip*
        cmd.Parameters.AddWithValue("@cityName", id);//ID from clicked control 
     }
}


protected void lnkButtonClick(object sender, EventArgs e)
{
     string id = ((LinkButton)sender).ClientID;
     UpdateDB(id);
}

这回答了关于将 ID 属性作为参数传递给存储过程的问题。

但是,我会调整它,而不是CommandArguments像这样使用:

<asp:LinkButton ID="Xtown" runat="server" OnClick="lnkButtonClick" CommandArgument="Xtown">Xtown</asp:LinkButton>

并以与 clientid 类似的方式访问它:

protected void lnkButtonClick(object sender, EventArgs e)
{
     string args = ((LinkButton)sender).CommandArgument;
     UpdateDB(args);
}
于 2013-04-09T15:03:35.137 回答
0

据我了解,您应该使用 LinkBut​​ton 而不是超链接并处理每个 LinkBut​​ton 的单击事件。将您的 SQL 代码放在单独的参数化方法中,并将每个事件的 LinkBut​​ton 控件 ID 作为参数传递。

于 2013-04-09T14:46:05.763 回答