Checkboxlist多值选择并在asp.net的gridview中显示

时间:2014-05-27 01:55:46

标签: c# asp.net sql gridview checkboxlist

我正在使用C#作为网络应用程序的复选框列表。我在下面写下我的代码。当我从复选框列表中选择多个值时,它会报告错误。但只有一个值选择,它工作正常。

代码分为两部分:
1.从复选框列表中选择(multichoice):该值与数据库中的值相同,存储相关数据 2.显示值到gridview:选择后,将整个表显示到gridview进行显示。

我的错误是当从复选框中选择2个或更多值时,则错误显示“变量名称@textInput已经声明。变量名称在查询批处理或存储过程中必须是唯一的。”

有人可以帮我解决这个问题吗?或者你还有其他办法。

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

public partial class TestGridview : System.Web.UI.Page
{
private int count = 0;
private DataSet dc = new DataSet();

protected void Page_Load(object sender, EventArgs e)
{
}
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
}

protected void Button1_Click(object sender, EventArgs e)
{

    // Create the list to store.
    List<String> YrStrList = new List<string>();
    foreach (ListItem item in CheckBoxList1.Items)
    {
        if (item.Selected)
        {
            YrStrList.Add(item.Value);
        }
    }

    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["XMLConnectionString"].ConnectionString);
    // Create the command object
    string str = "SELECT * FROM XML WHERE [Part_Numbber] = @textInput";
    SqlCommand cmd = new SqlCommand(str, con);

    for (int d = 0; d < YrStrList.Count; d++)
    {
        DataSet ds = new DataSet();
        string text;
        text = YrStrList[d];
        cmd.Parameters.AddWithValue("textInput", text);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(ds, "XML");
        if (count == 0) {

            dc = ds.Clone();
            count++;
        }


        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
        {
            if (ds.Tables[0].Rows[i].ItemArray[0].ToString() != "NULL")
                dc.Tables[0].ImportRow(ds.Tables[0].Rows[i]);
        }
    }


    GridView1.DataSource = dc;
    GridView1.DataBind();
}

protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e)
{
}

}

1 个答案:

答案 0 :(得分:1)

由于您重复执行相同的查询,您可以在循环外添加参数,然后将其填入内部。

SqlCommand cmd = new SqlCommand(str, con);
command.Parameters.Add(new SqlParameter("@textInput", 0));

 for (int d = 0; d < YrStrList.Count; d++)
    {
 string text;
        text = YrStrList[d];
command.Parameters["@textInput"].Value = text ;
...
}