2010-09-01 7 views
0

Вот мой GridView:C# GridView На Edit Error

<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

ответ

0

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

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

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

0

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

Если вы посмотрите на аналогичный стол для стопов, однако, я предполагаю, вы не найдете StopsID.

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

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

+0

У меня есть пара таблиц в DataSet на SQL Server. Первоначальный GridView загружает таблицу агентства, но я специально поместил другой источник данных в код, если другой элемент выбран из DropDownList. – balexander

+0

Я разместил изображение DataTables в DataSet выше. – balexander

Смежные вопросы