无法从GridView asp.net中的空数据模板加载控件

时间:2013-07-11 23:43:46

标签: asp.net gridview data-binding

我有一个GridView,它与数据源的DataTable捆绑在一起,当底层数据源中没有记录时,我会显示具有两个DropDown(State和City)的EmptyDataTemplate,并基于State i填充City。

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

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

这就是我正在做的事情

在函数下方获取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();
        }
    }
}

任何人都可以提供任何有关它出错的建议

1 个答案:

答案 0 :(得分:0)

确保仅为适当的行类型调用FillCitiesByStateId()。也许你称它为页脚行?

DataControlRowType Enumeration

而不是:

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

尝试:

if (e.Row.RowType == DataControlRowType.EmptyDataRow)
{
    FillCitiesByStateId();
}