2010-05-07 2 views
0

Почему этот код не работает? Когда я запускаю его БВ Экспресс показывает эту ошибку:asp.net listbox

Object reference not set to an instance of an object.

Line 73: kom.Parameters.Add("@subcategories", SqlDbType.Text).Value = s_categoreis.SelectedItem.ToString();

Это мой ASCX файл:

<asp:ListBox ID="categories" runat="server" Height="380px" CssClass="kat" AutoPostBack="true" DataSourceID="SqlDataSource1" 
     DataTextField="Categories" DataValueField="ID" 
     onselectedindexchanged="kategorije_SelectedIndexChanged"></asp:ListBox> 


    <asp:Button ID="Button1" CssClass="my" runat="server" Text="click" 
      onclick="Button1_Click" /> 

     <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
     <ContentTemplate> <asp:ListBox ID="s_categoreis" CssClass="pod" Height="150px" Enabled="true" runat="server"></asp:ListBox></ContentTemplate> 
      <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="categories" EventName="SelectedIndexChanged" /> 

      </Triggers> 
     </asp:UpdatePanel> 


    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     ConnectionString="<%$ ConnectionStrings:estudent_piooConnectionString %>" 
     SelectCommand="SELECT [ID], [Categories] FROM [categories]"> 
    </asp:SqlDataSource> 

и это мой ascx.cs:

SqlConnection veza; 
    SqlCommand kom = new SqlCommand(); 
    SqlParameter par1 = new SqlParameter(); 
    SqlParameter par2 = new SqlParameter(); 
    SqlParameter par3 = new SqlParameter(); 
    SqlParameter par4 = new SqlParameter(); 
    SqlParameter par5 = new SqlParameter(); 
    SqlParameter par6 = new SqlParameter(); 
    SqlParameter par7 = new SqlParameter(); 
    SqlParameter par8 = new SqlParameter(); 
    SqlParameter par9 = new SqlParameter(); 

    protected void Page_Load(object sender, EventArgs e) 
    {       
      Listapod_kategorije(1);    
    } 

    protected void kategorije_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     Listapod_kategorije(Convert.ToInt32(kategorije.SelectedValue));  
    } 

    private void Listapod_kategorije(int broj) { 

     SqlDataSource ds = new SqlDataSource(); 
     ds.ConnectionString = ConfigurationManager.ConnectionStrings["estudent_piooConnectionString"].ConnectionString; 
     ds.SelectCommand = "Select * from pod_kategorije where kat_id=" + broj; 
     pod_kategorije.DataSource = ds; 
     pod_kategorije.DataTextField = "pkategorija"; 
     pod_kategorije.DataValueField = "ID"; 
     pod_kategorije.DataBind();     
    } 

    protected void Button1_Click(object sender, EventArgs e) 
    { 
     Guid jk = new Guid(); 

     object datum = DateTime.Now; 
     veza = new SqlConnection(@"..."); 

      Random broj = new Random(); 
      int b_kor = broj.Next(1, 1000); 
      kom.Parameters.Add("@text", SqlDbType.Text).Value = str; 
      kom.Parameters.Add("@user", SqlDbType.UniqueIdentifier).Value = jk; 

      kom.Parameters.Add("@date", SqlDbType.DateTime).Value = datum; 
      kom.Parameters.Add("@visits", SqlDbType.Int).Value = 0; 
      kom.Parameters.Add("@answers", SqlDbType.Int).Value = 0; 
      kom.Parameters.Add("@username", SqlDbType.Text).Value = "unknown_" + b_kor.ToString(); ; 
      kom.Parameters.Add("@categories", SqlDbType.Text).Value = categories.SelectedItem.ToString(); 
      kom.Parameters.Add("@sub_categories", SqlDbType.Text).Value = s_categoreis.SelectedItem.ToString(); 
      veza.Open(); 
      kom.ExecuteNonQuery(); 
      veza.Close(); 
      Response.Redirect("default.aspx"); 

ответ

0

Я предположил бы, что Свойство s_categoreis.SelectedItem равно null. Это будет вызвано тем, что поле списка не имеет выбранного значения.

Вы можете протестировать некоторые из них, используя отладчик и выполнив код, наведя указатель мыши на идентификаторы и используя окно часов/быстрого просмотра/немедленного просмотра.

+0

Да, s_categoreis.SelectedItem свойство имеет нулевое значение, но почему? Я выбираю пункт из s_categoreis управления .. – 2010-05-07 23:18:25

2

Я не могу сказать, где s_categoreis связывается со своим кодом. Я предполагаю, что вы привязываете DataSource вашего списка в ответ на пост, что приведет к тому, что любой выбор, который вы сделали, будет потерян после нажатия кнопки.

Убедитесь, что вы проверить, если страница выложила еще до связывания вашего List Box, например, так:

if (!IsPostBack) 
{ 
    //bind s_categoreis here 
} 
+0

Это время связано с DataSourceID = «SqlDataSource1» (броское название, а?) И связанных с ними областях. Трудно узнать, что здесь происходит, потому что код выглядит наполовину переведенным. Список - s_categoreis, но один из методов - kategorije_SelectedIndexChanged. Я предположил, что мы не смотрим на точный код, но вы можете быть правы, возможно, больше того, чего мы не видим. –

0

SelectedItem является объектом ListItem, вы должны изменить

s_categoreis.SelectedItem.ToString(); 

либо:

s_categoreis.SelectedItem.Text; 

или:

s_categoreis.SelectedItem.Value; 
+0

Хотя это правда, это не поможет ему, так как SelectedItem имеет значение null. – wsanville

0
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:estudent_piooConnectionString %>" 
    SelectCommand="SELECT [ID], [Categories] FROM [categories]"> 
</asp:SqlDataSource>