Reputation: 8697
I have a dropdownlist. I have added a default value into a dropdownlist box with this codes
<asp:DropDownList ID="DDLCase" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DDLCase_SelectedIndexChanged" AppendDataBoundItems="true" >
<asp:ListItem Value="">Select Member Report ID</asp:ListItem>
</asp:DropDownList>
For example i have DB value such as 123, 1234.
When i run my webform and clicked 123 and 1234 nothing happened. However when i went to click the ListItem Value they gave me some error
Conversion failed when converting the varchar value 'Select Member Report ID' to data type int.
This is my back-end code for my DDL at my pageload.
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
SqlConnection con = new SqlConnection("Data Source = localhost; Initial Catalog = project; Integrated Security = SSPI");
SqlCommand cm = new SqlCommand("Select pr.policereportid from PoliceReport pr, AdminOfficialReport aor, MemberReport mr where pr.memberreportid=mr.memberreportid and mr.caseprogress='settled' and aor.officialreport IS NULL", con);
con.Open();
SqlDataReader dr;
dr = cm.ExecuteReader();
while (dr.Read())
{
DDLCase.Items.Add(dr["policereportid"].ToString());
}
DDLCase.Items.Insert(0, new ListItem("Select Member Report ID", "-1"));
dr.Close();
con.Close();
}
}
This is where my error occurs. It occurs at the area around dr = cm.ExecuteReader();
protected void DDLCase_SelectedIndexChanged(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("Data Source = localhost; Initial Catalog = project; Integrated Security = SSPI");
con.Open();
SqlCommand cm = new SqlCommand("Select lro.fullname, lro.contact, mr.typeofcrime, mr.location,mr.crdatetime, pr.policeid, pr.prdatetime, pr.policereport, pr.image1, mr.citizenreport from MemberReport mr, PoliceReport pr, LoginRegisterOthers lro where pr.policereportid = '" + DDLCase.SelectedItem.Text + "' and mr.memberreportid=pr.memberreportid and lro.username=mr.username and mr.caseprogress='settled'", con);
SqlDataReader dr;
dr = cm.ExecuteReader();
if (dr.Read())
{
lblFullName.Text = dr["fullname"].ToString();
lblContact.Text = dr["contact"].ToString();
lblTOC.Text = dr["typeofcrime"].ToString();
lblLocation.Text = dr["location"].ToString();
lblCRDT.Text = dr["crdatetime"].ToString();
lblPicture.Text = dr["image1"].ToString();
lblAssign.Text = dr["policeid"].ToString();
lblPRDT.Text = dr["prdatetime"].ToString();
lblCR.Text = dr["citizenreport"].ToString();
lblPR.Text = dr["policereport"].ToString();
}
con.Close();
}
How do i solve this?
Upvotes: 1
Views: 326
Reputation: 302
Remove <asp:ListItem Value="">Select Member Report ID</asp:ListItem>
this line of code from your markup.
after binding your DDL just write this line
DDLID.items.insert(0,listboxitem("Select Member Report ID","-1"));
Now make your code as look like
int index =1; while (dr.Read()) { if(index == 1) { DDLCase.Items.Insert(0, new ListItem("Select Member Report ID", "-1"));
} else { DDLCase.Items.Add(new ListItem(dr["dataId"].toString(), index)); } index++;
}
Upvotes: 1
Reputation: 15579
cos its expecting a value of type int and in the case of the default there is no value set and thus it is picking up the text in the option field i.e Select Member Report ID
Change it to:
<asp:ListItem Value="-1">Select Member Report ID</asp:ListItem>
and deal with the negative value appropriately in your code behind/javascript
use SelectedValue and not Text!
SqlCommand cm = new SqlCommand("Select lro.fullname, lro.contact, mr.typeofcrime, mr.location,mr.crdatetime,
pr.policeid, pr.prdatetime, pr.policereport, pr.image1, mr.citizenreport from MemberReport mr, PoliceReport pr,
LoginRegisterOthers lro where pr.policereportid = '" + DDLCase.SelectedValue + "' and
mr.memberreportid=pr.memberreportid and lro.username=mr.username and mr.caseprogress='settled'", con);
Upvotes: 3