C # GridView при ошибке редактирования - PullRequest
0 голосов
/ 02 сентября 2010

Вот мой GridView:

<div>
<asp:GridView ID="MainGridView" runat="server" AllowPaging="True" DataSourceID="GridViewDataSource" EnableModelValidation="True" CssClass="mGrid" PagerStyle-CssClass="pgr" 
        AlternatingRowStyle-CssClass="alt" onpageindexchanging="MainGridView_PageIndexChanging">
<Columns>
    <asp:CommandField ButtonType="Image" CancelImageUrl="~/images/icon_cancel.jpg" EditImageUrl="~/images/icon_edit.jpg" ShowEditButton="True" UpdateImageUrl="~/images/icon_update.jpg" />
</Columns>
</asp:GridView>
    <asp:ObjectDataSource ID="GridViewDataSource" runat="server" 
        OldValuesParameterFormatString="original_{0}" SelectMethod="GetDataByCategory" 
    TypeName="SEPTA_DSTableAdapters.AgencyTBLTableAdapter">
        <SelectParameters>
            <asp:SessionParameter DefaultValue="" Name="Category" SessionField="Cat" Type="String" />
        </SelectParameters>
    </asp:ObjectDataSource>
</div>

Вот мой код:

protected void CategoryDDL_SelectedIndexChanged(object sender, EventArgs e)
{
    Session["Cat"] = CategoryDDL.SelectedValue;
    FileTypeDDL_SelectedIndexChanged(sender,e);
}
protected void FileTypeDDL_SelectedIndexChanged(object sender, EventArgs e)
{
    //Agency Value
    if (FileTypeDDL.SelectedValue == "Agency") { AgencyGrid(); }
    else if (FileTypeDDL.SelectedValue == "Stops") { StopsGrid(); }
}
public void AgencyGrid ()
{
    SEPTA_DS.AgencyTBLDataTable GetAgency = (SEPTA_DS.AgencyTBLDataTable)ata.GetDataByCategory(Session["Cat"].ToString());
    string[] arrayOfKeys = new string[] { "AgencyID" };
    MainGridView.DataKeyNames = arrayOfKeys;
    GridViewDataSource.TypeName = "SEPTA_DSTableAdapters.AgencyTBLTableAdapter";
    MainGridView.AllowSorting = true;
}
public void StopsGrid()
{
    SEPTA_DS.StopsTBLDataTable GetStops = (SEPTA_DS.StopsTBLDataTable)stota.GetDataByCategory(Session["Cat"].ToString());
    string[] arrayOfKeys = new string[] { "StopsID" };
    MainGridView.DataKeyNames = arrayOfKeys;
    GridViewDataSource.TypeName = "SEPTA_DSTableAdapters.StopsTBLTableAdapter";
    MainGridView.AllowSorting = true;
}
protected void MainGridView_RowEditing(object sender, GridViewEditEventArgs e)
{

}

Мой GridView меняет свойства, когда я выбираю между двумя отдельными DropDownLists

<tr><td>File Name<br /><asp:DropDownList ID="FileTypeDDL" runat="server" 
        Width="136" onselectedindexchanged="FileTypeDDL_SelectedIndexChanged" AutoPostBack="true">
<asp:ListItem Text="Agency" Value="Agency" />
<asp:ListItem Text="Calendar" Value="Calendar" />
<asp:ListItem Text="Calendar Dates" Value="Calendar Dates" />
<asp:ListItem Text="Routes" Value="Routes" />
<asp:ListItem Text="Stop Times" Value="Stop Times" />
<asp:ListItem Text="Stops" Value="Stops" />
<asp:ListItem Text="Transfers" Value="Transfers" />
<asp:ListItem Text="Trips" Value="Trips" />
</asp:DropDownList></td></tr>

<tr><td>Category<br /><asp:DropDownList ID="CategoryDDL" runat="server" Width="136" onselectedindexchanged="CategoryDDL_SelectedIndexChanged" AutoPostBack="true">
<asp:ListItem Text="Select" Value="Select" />
<asp:ListItem Text="Regional Rail" Value="Regional Rail" />
<asp:ListItem Text="Transit" Value="Transit" />
</asp:DropDownList></td></tr>

Ошибка заключается в Stops в FileTypeDDL.

Когда под Agency я могу нажать кнопку редактирования и успешно отменить кнопку.

Когда под Stops я получаю ошибку ниже:

 DataBinding: 'System.Data.DataRowView' does not contain a property with the name 'StopsID'.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Web.HttpException: DataBinding: 'System.Data.DataRowView' does not contain a property with the name 'StopsID'.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[HttpException (0x80004005): DataBinding: 'System.Data.DataRowView' does not contain a property with the name 'StopsID'.]
   System.Web.UI.DataBinder.GetPropertyValue(Object container, String propName) +8660309
   System.Web.UI.WebControls.GridView.CreateChildControls(IEnumerable dataSource, Boolean dataBinding) +2178
   System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data) +57
   System.Web.UI.WebControls.GridView.PerformDataBinding(IEnumerable data) +14
   System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data) +114
   System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +31
   System.Web.UI.WebControls.DataBoundControl.PerformSelect() +142
   System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +73
   System.Web.UI.WebControls.GridView.DataBind() +4
   System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +82
   System.Web.UI.WebControls.BaseDataBoundControl.OnPreRender(EventArgs e) +22
   System.Web.UI.WebControls.GridView.OnPreRender(EventArgs e) +17
   System.Web.UI.Control.PreRenderRecursiveInternal() +80
   System.Web.UI.Control.PreRenderRecursiveInternal() +171
   System.Web.UI.Control.PreRenderRecursiveInternal() +171
   System.Web.UI.Control.PreRenderRecursiveInternal() +171
   System.Web.UI.Control.PreRenderRecursiveInternal() +171
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +842

ВОПРОС

Почему он не работает под Stops, но работает под Agency? В коде позади отсутствует компонент?

Вот мои DataTables:

alt text

Ответы [ 2 ]

0 голосов
/ 02 сентября 2010

Кажется, что при использовании стандартных кнопок редактирования с GridView функции должны были быть добавлены к Page_Load, как, например,

protected void Page_Load(object sender, EventArgs e)
    {
        if (FileTypeDDL.SelectedValue == "Agency") { AgencyGrid(); }
        else if (FileTypeDDL.SelectedValue == "Stops") { StopsGrid(); }
    }

Если кто-нибудь знает лучшее решение, чем ставить эти строки везде, я весь в ушах.

0 голосов
/ 02 сентября 2010

Полагаю, если вы посмотрите на свой источник данных (базу данных SQL? Я не уверен ... где-то позади AgencyTBLTableAdapter), вы увидите, что в таблице есть столбец с именем AgencyID.

Однако, если вы посмотрите на аналогичную таблицу «Остановки», я предполагаю, что вы не найдете StopsID.

Необходимо изменить источник данных резервного копирования, чтобы иметь StopsID.

Если вы можете, пожалуйста, предоставьте больше информации о таблицах данных за TableAdapters.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...