Reputation: 1683
I have a DataList that Displays some Posts with a RadioButtonList inside where it contains 5 choices from 1 to 5, however when i try to get the selected value of theRadioButtonList, it throws Null Exception, thats my code:
error @ string choice = RadioButtonList1.SelectedItem.Value;
protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e)
{
foreach (DataListItem item in DataList2.Items)
{
RadioButtonList RadioButtonList1 = (RadioButtonList)DataList2.FindControl("RadioButtonList1");
string choice = RadioButtonList1.SelectedItem.Value;
Label post_IDLabel = (Label)item.FindControl("post_IDLabel");
int post_ID = Convert.ToInt32(post_IDLabel.Text);
int value = Convert.ToInt32(choice.ToString());
string connStr = ConfigurationManager.ConnectionStrings["MyDbConn"].ToString();
SqlConnection conn = new SqlConnection(connStr);
SqlCommand cmd = new SqlCommand("rate", conn);
cmd.CommandType = CommandType.StoredProcedure;
string email = Session["email"].ToString();
int course_ID = Convert.ToInt32(Request.QueryString["courseID"]);
cmd.Parameters.Add(new SqlParameter("@course_ID", course_ID));
cmd.Parameters.Add(new SqlParameter("@postID", post_ID));
cmd.Parameters.Add(new SqlParameter("@myemail", email));
cmd.Parameters.Add(new SqlParameter("@rate", value));
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
Response.Write(choice);
}
DataList2.DataBind();
}
that's the error:
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Upvotes: 2
Views: 2585
Reputation: 44941
I suspect your issue is with those radiobuttonlists that do not have a value selected. When this is the case selecteditem will be null, but you are not testing for this.
Here is a rewrite that also fixes potential issues with the connections and commands not being disposed and of excessive opening and closing of the connection:
protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e)
{
string connStr = ConfigurationManager.ConnectionStrings["MyDbConn"].ToString();
using (SqlConnection conn = new SqlConnection(connStr))
{
using (SqlCommand cmd = new SqlCommand("rate", conn))
{
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.Add("@course_ID", System.Data.SqlDbType.Int);
cmd.Parameters.Add("@postID", System.Data.SqlDbType.Int);
cmd.Parameters.Add("@myemail", System.Data.SqlDbType.Int);
cmd.Parameters.Add("@rate", System.Data.SqlDbType.VarChar);
conn.Open();
foreach (DataListItem item in DataList2.Items)
{
RadioButtonList RadioButtonList1 = (RadioButtonList)DataList2.FindControl("RadioButtonList1");
if (RadioButtonList1.SelectedItem != null)
{
string choice = RadioButtonList1.SelectedItem.Value;
Label post_IDLabel = (Label)item.FindControl("post_IDLabel");
cmd.Parameters["@course_ID"].Value = Convert.ToInt32(Request.QueryString["courseID"]);
cmd.Parameters["@postID"].Value = Convert.ToInt32(post_IDLabel.Text);
cmd.Parameters["@myemail"].Value = Session["email"] as string;
cmd.Parameters["@rate"].Value = Convert.ToInt32(RadioButtonList1.SelectedItem.Value);
cmd.ExecuteNonQuery();
Response.Write(choice);
}
}
}
}
DataList2.DataBind();
}
Upvotes: 2
Reputation: 65516
Looks to me like you're not finding the control RadioButtonList1
RadioButtonList RadioButtonList1 = (RadioButtonList)DataList2.FindControl("RadioButtonList1");
if(RadioButtonList1 == null) throw new Exception("Can't find control RadioButtonList1");
string choice = RadioButtonList1.SelectedItem.Value;
Upvotes: 0