列表框asp.net选中的问题

时间:2010-05-08 22:54:24

标签: c# asp.net webforms listbox

当我选择“kategorije”中的项目时,新项目会被加载到“SUB_kategorije”中,但是当我从SUB_kategorije中选择项目时,当我点击按钮时它会显示此错误:

对象引用未设置为对象的实例。

Line 101: kom.Parameters.Add("@podkategorija", SqlDbType.Text).Value =
          SUB_kategorije.SelectedItem.ToString();

这是我的来源......

dod_pit.ascx

dod_pit.ascx.cs

2 个答案:

答案 0 :(得分:0)

问题在于你Page_Load。将其更改为:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        SqlDataSource df = new SqlDataSource();
        df.ConnectionString = conn;
        df.SelectCommand = "SELECT [ID], [Kategorije] FROM [kategorije] ";
        kategorije.DataSource = df;
        kategorije.DataTextField = "Kategorije";
        kategorije.DataValueField = "ID";
        kategorije.DataBind();
    }         
}

每次代码执行回发时,问题都在于重新绑定kategorije,所以在Button1_Click运行时,kategorije已重新绑定并重置,因此SelectedValue为空

如果发生回发,您的Page_Load代码会先运行,那么Button1_Click会立即运行。将该代码移到!IsPostBack检查中会导致它仅在您第一次加载页面时运行,而不会在SelectedValue可用之后再次运行。

答案 1 :(得分:0)

当我从“kategorije”中选择项目时,新项目未加载到“SUB_kategorije”,为什么?

 protected void Page_Load(object sender, EventArgs e)
    {


        if (!IsPostBack)
        {

            SqlDataSource ds = new SqlDataSource();
            ds.ConnectionString = conn;
            ds.SelectCommand = "SELECT [ID], [Kategorije] FROM [kategorije] ";
            kategorije.DataSource = ds;
            kategorije.DataTextField = "Kategorije";
            kategorije.DataValueField = "ID";
            kategorije.DataBind();
            kategorije.SelectedIndex = 1;

            SqlDataSource dk = new SqlDataSource();
            dk.ConnectionString = conn;
            dk.SelectCommand = "SELECT * from pod_kategorije WHERE kat_id = " + kategorije.SelectedItem.Value;
            SUB_kategorije.DataSource = dk;
            SUB_kategorije.DataTextField = "pkategorija";
            SUB_kategorije.DataValueField = "ID";
            SUB_kategorije.DataBind();


        }







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


            SqlDataSource dk = new SqlDataSource();
            dk.ConnectionString = conn;
            dk.SelectCommand = "SELECT * from pod_kategorije WHERE kat_id = " + kategorije.SelectedItem.Value;
            SUB_kategorije.DataSource = dk;
            SUB_kategorije.DataTextField = "pkategorija";
            SUB_kategorije.DataValueField = "ID";
            SUB_kategorije.DataBind();


    }