预先选择带有SQL列值的列表框 [英] Pre select listbox with sql column values

查看:91
本文介绍了预先选择带有SQL列值的列表框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的列表框有几个值.我试图在页面加载时预先选择我的列表框,但问题是它只选择了第一个值.
假设我的列表框中的值是1-10,而数据库列中的值是1,4,7,则它在列表框中仅选择1.
如果我有1,2,7,则它会预先选择1和2
如果我有1,2,3,则它会预先选择1,2和3
因此,如果出现间隙,它将仅预先选择一起的值,然后选择较高的值.

my listbox has severals values. I am trying to pre select my listbox at page load but the problem is it only select the first value.
Suppose i have values in my listbox from 1-10 and in database column i have 1,4,7 then it pre select only 1 in the listbox.
If i have 1,2,7 then it preselect 1 and 2
If i have 1,2,3 then it preselect 1,2 and 3
So it pre select only together values if any gap occur then it select upper value.

<asp:ListBox ID="dd_subcategory" runat="server" CssClass="lbcss" SelectionMode="Multiple">
</asp:ListBox>


private void FillSubCategory(int CategoryID)
    {
        SqlCommand cmd = new SqlCommand("sps_bindcategory", con);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@flag", 2);
        cmd.Parameters.AddWithValue("@CategoryID", CategoryID);
        DataSet objDs = new DataSet();
        SqlDataAdapter dAdapter = new SqlDataAdapter();
        dAdapter.SelectCommand = cmd;
        con.Open();
        dAdapter.Fill(objDs);
        con.Close();
        if (objDs.Tables[0].Rows.Count > 0)
        {
            dd_subcategory.DataSource = objDs.Tables[0];
            dd_subcategory.DataTextField = "subcategory_name";
            dd_subcategory.DataValueField = "subcategory_id";
            dd_subcategory.DataBind();            
        }
    }

if (!Page.IsPostBack)
        {
            DataTable dt = GetData();
            if (dt.Rows.Count > 0)
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    string id = dt.Rows[i]["subcategory_id"].ToString();
                    if (id == dd_subcategory.Items[i].Value)
                    {
                        dd_subcategory.Items[i].Selected = true;
                    }
                }
            }
        }
private DataTable GetData()
    {

        DataTable dt = new DataTable();
        try
        {
            con.Open();
            SqlCommand cmd = new SqlCommand("sps_addetails", con);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@ad_id", ad_id);
            cmd.Parameters.AddWithValue("@useremail", ses);
            SqlDataAdapter DA = new SqlDataAdapter(cmd);
            DA.Fill(dt);
            con.Close();
        }
        catch (SqlException)
        {
            throw;
        }
        return dt;
    }


ALTER PROCEDURE [dbo].[sps_addetails] 
	@ad_id int,
	@useremail nvarchar(100)
AS
BEGIN
	select r.*, sc.subcategory_id from dbo.tbl_adregister r INNER JOIN tbl_adsubcategory sc on r.ad_id=sc.ad_id
	where useremail=@useremail and r.ad_id=@ad_id
END

推荐答案

您的错误是假设数据集中的行索引具有与列表中项目索引的任何连接...
而不是使用list.Items [i],您必须使用
Your error is an assumption that the row index in the data set has any connection with the item index in the list...
Instead of using list.Items[i] you have to use list.FindByValue[^] to select the correct item...
string id = dt.Rows[i]["subcategory_id"].ToString();
ListItem item = dd_subcategory.Items.FindByValue(id);

if(item!=null)
{
  item.Selected = true;
}


这篇关于预先选择带有SQL列值的列表框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆