我是asp.net的新手。我有一个dropdownList,显示特定文章的所有类别。问题是,当我想编辑文章时,它不会显示在dropdownList中选择的默认值。
protected void datalist2_OnItemCreated(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.EditItem)
{
DropDownList drpdKategoria = e.Item.FindControl("drpdKategoria") as DropDownList;
SqlConnection con = new SqlConnection(connection);
string Qry = "select * from kategoria";
SqlDataAdapter da = new SqlDataAdapter(Qry, con);
DataSet ds = new DataSet();
con.Open();
da.Fill(ds);
drpdKategoria.DataSource = ds;
drpdKategoria.DataValueField = "id";
drpdKategoria.DataTextField = "emertimi";
drpdKategoria.DataBind();
drpdKategoria.SelectedValue = drpdKategoria.Items.FindByText(Qry).Value;
//drpdKategoria.Items.FindByValue(string val).Selected = true;
con.Close();
con.Dispose();
ds.Dispose();
da.Dispose();
}
}
EditArtikull.aspx
<asp:Label ID="Label5" runat="server" style="font-weight: 700">Kategoria</asp:Label>
<fieldset>
<asp:DropDownList ID="drpdKategoria" runat="server" AutoPostBack="false"></asp:DropDownList>
</fieldset>
<br/>
错误:SystemNullReference异常{&#34;对象引用未设置为对象的实例。&#34;}
答案 0 :(得分:1)
这条线可能无法找到任何东西:
drpdKategoria.Items.FindByText(Qry)
由于Qry
是一个SQL语句:
string Qry = "select * from kategoria";
我 假设 DropDownList
中的显示值不是SQL查询。因此,当您在第一行上调用.Value
时,您将尝试取消引用未找到的内容(即null
),从而导致错误。
你究竟想找到什么项目?如果要选择默认项目,则需要能够以某种方式识别该项目。在您的数据中,可以是已知的id
值或已知的emertimi
值。例如,如果您有一个已知的emertimi
值,那么它将是:
drpdKategoria.SelectedValue = drpdKategoria.Items.FindByText("some known value").Value
为了使其更加健壮,您可能希望添加一些空检查。像这样:
var defaultValue = drpdKategoria.Items.FindByText("some known value");
if (defaultValue != null)
drpdKategoria.SelectedValue = defaultValue.Value