И DataSource, и DataSourceID определены в ctl00. Удалить одно определение

Я пытаюсь декларативно создать RadGrid с SqlDataSource, и также необходимо обновить сетку записями базы данных со стороны сервера.

Пример кода приведен ниже.

<asp:SqlDataSource ID="SqlDataSource1" runat="server" SelectCommand="spSelect" SelectCommandType="StoredProcedure" ConnectionString="<%$ ConnectionStrings:iTomsConnectionString %>">
        <SelectParameters>
            <asp:SessionParameter Name="Id" SessionField="Id" Type="Int32" />
            <asp:SessionParameter Name="Name" SessionField="Name" Type="String" />
        </SelectParameters>
    </asp:SqlDataSource>

    <telerik:RadScriptManager ID="RadScriptManager1" runat="server">
    </telerik:RadScriptManager>
    <telerik:RadGrid ID="grvUpdate" runat="server" GridLines="Horizontal"
        CellPadding="0" BorderWidth="0px" EnableEmbeddedSkins="False" Skin="skn_RadGrid"
        SkinsDir="|CurrentTheme|/" SkinsPath="|CurrentTheme|/"
        Width="382px" CellSpacing="0">
        <MasterTableView
            AllowPaging="true"
            PageSize="15"
            EditMode="PopUp"
            CommandItemDisplay="Top"
            AllowFilteringByColumn="false" DataSourceID="SqlDataSource1" AutoGenerateColumns="False" DataKeyNames="Id">

            <Columns>
                <telerik:GridBoundColumn DataField="Id" DataType="System.Int64" FilterControlAltText="Filter Id column" HeaderText="Id" ReadOnly="True" SortExpression="Id" UniqueName="Id">
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn DataField="Name" HeaderText="Name" SortExpression="Name" UniqueName="Name">
                </telerik:GridBoundColumn> 
        <telerik:GridBoundColumn DataField="Amount" HeaderText="Amount" SortExpression="Amount" UniqueName="Amount">
                </telerik:GridBoundColumn>                   
                <telerik:GridButtonColumn DataTextField="Reject" HeaderText="Reject" SortExpression="Reject" Text="Reject Button" UniqueName="Reject" CommandName="Reject"></telerik:GridButtonColumn> 
            </Columns>

            <EditFormSettings>
                <EditColumn InsertImageUrl="Update.gif" UpdateImageUrl="Update.gif" CancelImageUrl="Cancel.gif"></EditColumn>
            </EditFormSettings>
        </MasterTableView>


    </telerik:RadGrid>

Как я могу выполнить привязку данных без ошибки, упомянутой в заголовке этого запроса в коде сервера ASP.Net, а также иметь SqlDataSource для получения / обновления / удаления записей?

Код на стороне сервера в page_load приведен ниже.

grvUpdate.DataSource = ds.Tables[0];
grvUpdate.DataBind();

person CPK_2011    schedule 23.08.2016    source источник
comment
похоже, что сообщение об ошибке говорит само за себя, удалите одно или другое ..   -  person MethodMan    schedule 23.08.2016


Ответы (2)


Есть два способа сделать это

  1. Назначьте свой идентификатор элемента управления источником данных свойству DataSourceID, которое в вашем случае должно быть DataSourceID = "SqlDataSource1". В этом подходе используются декларативные элементы управления источником данных и декларативная привязка данных к сетке. (Дополнительного кодирования не требуется)

  2. Добавьте событие NeedDataSource и назначьте свой источник данных в коде позади, что в вашем случае должно быть сделано следующим образом

Способ 1

<asp:SqlDataSource ID="SqlDataSource1" runat="server" SelectCommand="spSelect" SelectCommandType="StoredProcedure" ConnectionString="<%$ ConnectionStrings:iTomsConnectionString %>">
        <SelectParameters>
            <asp:SessionParameter Name="Id" SessionField="Id" Type="Int32" />
            <asp:SessionParameter Name="Name" SessionField="Name" Type="String" />
        </SelectParameters>
</asp:SqlDataSource>

<telerik:RadGrid ID="grvUpdate" runat="server" DataSourceID="SqlDataSource1">
    //...
</telerik:RadGrid>

Способ 2

<telerik:RadGrid ID="grvUpdate" runat="server" OnNeedDataSource="grvUpdate_NeedDataSource">
    //...
</telerik:RadGrid>

protected void grvUpdate_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
    grvUpdate.DataSource = ds.Tables[0]; // assume ds already exists in the scope
}

Пожалуйста, обратитесь к этому документу для получения дополнительных тем и подробностей о привязке данных RadGrid:
http://docs.telerik.com/devtools/aspnet-ajax/controls/grid/data-binding/understanding-data-binding/telerik-radgrid-data-binding-basics

person woodykiddy    schedule 24.08.2016

Мне нужно реализовать оба метода одновременно. И решение приведено ниже.

grvUpdate.DataSource = ds.Tables[0];
grvUpdate.DataSourceID = String.Empty;
grvUpdate.DataBind();
person CPK_2011    schedule 25.08.2016