0

我有一个 GridView,它与数据源的 DataTable 绑定,当底层数据源中没有记录时,我会显示 EmptyDataTemplate 和两个 DropDown(州和城市),并根据州填充城市。

现在我的问题是直到我在数据源中有一些记录它工作正常,但是一旦我从数据源中删除最后一条剩余的记录,它就会抛出错误,它切换到空数据模板但它找不到状态下拉列表(基于我正在填写城市下拉菜单)。但是一旦我刷新页面,它就可以正常工作。

我不明白要抓取哪个事件来放置代码

这就是我在做什么

下面的函数获取 stateid 并根据它填充城市

   private void FillCitiesByStateId()
    {
        drpCity = grdLocationView.Controls[0].Controls[0].FindControl("drpCitiesAdd") as DropDownList;
        drpState = grdLocationView.Controls[0].Controls[0].FindControl("drpStatesAdd") as DropDownList; // Fetches the States DropDown from EmptyDataTemplate.
        if (drpState != null)
        {
            objCity.StateId = Convert.ToInt32(drpState.SelectedValue); //It always throws error on this line.
            drpCity.DataSource = objCity.GetCitiesByStateId();
            drpCity.DataTextField = "Name";
            drpCity.DataValueField = "Id";
            drpCity.DataBind();
        }
    }

下面是代码 i 用于绑定下拉列表中的记录

protected void grdLocationView_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (dt.Rows.Count == 0)
    {
        FillCitiesByStateId();
    }
    else
    {
        if (e.Row.RowType == DataControlRowType.Header)
        {
            drpCity = e.Row.FindControl("drpCities") as DropDownList;
            drpState = e.Row.FindControl("drpStates") as DropDownList;
            objCity.StateId = Convert.ToInt32(drpState.SelectedValue);
            drpCity.DataSource = objCity.GetCitiesByStateId();
            drpCity.DataTextField = "Name";
            drpCity.DataValueField = "Id";
            drpCity.DataBind();
        }
    }
}

任何人都可以提供任何建议它出了什么问题

4

1 回答 1

0

确保您只为适当的行类型调用 FillCitiesByStateId()。也许您将其称为页脚行?

DataControlRowType 枚举

代替:

if (dt.Rows.Count == 0)
{
    FillCitiesByStateId();
}

尝试:

if (e.Row.RowType == DataControlRowType.EmptyDataRow)
{
    FillCitiesByStateId();
}
于 2013-07-12T18:02:02.790 回答