在GridView RowDataBound事件上编辑DropDownList

时间:2016-01-08 10:50:02

标签: c# asp.net gridview

问题是不同的,因为错误只出现在特定条件和我解释原因的地方。请仔细阅读问题。

这是HTML模式行DropDownListGridView的输出EditItemTemplate

<input type="hidden" name="gvProducts$ctl09$hdnArea" id="gvProducts_hdnArea_7" value="M4" />
                <select name="gvProducts$ctl09$Area" id="gvProducts_Area_7" class="ddl_Class_new" style="background-color:Orange;">
    <option value="M1">M1</option>
    <option value="M2">M2</option>
    <option value="M3">M3</option>
    <option value="M4">M4</option>
    <option value="M5">M5</option>
    <option value="M6">M6</option>
    <option value="M7">M7</option>
    <option selected="selected" value="M4">M4</option> 
</select>

生成列表并在DropDowmList事件中填充RowDataBound

if (e.Row.RowType == DataControlRowType.DataRow && gvProducts.EditIndex == e.Row.RowIndex)
{
    DropDownList ddlCities = (DropDownList)e.Row.FindControl("Area");
    HiddenField hdnval = (HiddenField)e.Row.FindControl("hdnArea");

    string query = " Select distinct Area ";
    query += " from tbl_area WHERE Left(area,1) = 'M'; ";

    OdbcCommand cmd = new OdbcCommand(query);
    ddlCities.DataSource = GetData(cmd);
    ddlCities.DataTextField = "Area";
    ddlCities.DataValueField = "Area";
    ddlCities.DataBind();
    ddlCities.Items.FindByValue(hdnval.Value).Selected = true;
}

在这种情况下,我没有问题,并且成功地编辑了感兴趣的行。

但我可以在GridView的另一行中找到第二种情况:

<input type="hidden" name="gvProducts$ctl09$hdnArea" id="gvProducts_hdnArea_6" value="I9" />
<select name="gvProducts$ctl09$Area" id="gvProducts_Area_6" class="ddl_Class_new" style="background-color:Orange;">
            <option value="I1">I1</option>
            <option value="I9">I9</option>
            <option selected="selected" value="I9">I9</option> 
        </select>

如果尝试编辑此行,我会收到错误

  

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

因为在RowDataBound事件的查询中,我只搜索:

Left(area,1) = 'M'

如何解决这个问题?

请帮帮我,谢谢你。

0 个答案:

没有答案