DataSource和DataSourceID都在' ctl00'上定义。删除一个定义

时间:2016-08-23 16:29:31

标签: c# asp.net telerik telerik-grid

我正在尝试以声明方式使用SqlDataSource创建RadGrid,并且还需要使用服务器端的数据库记录更新Grid。

示例代码如下。

<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 Server代码中此查询标题中提到的错误的情况下执行Databind,以及使用SqlDataSource检索/更新/删除记录?

page_load中的服务器端代码在下面给出

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

2 个答案:

答案 0 :(得分:1)

有两种方法可以做到这一点

  1. 将您的数据源控件ID分配给属性DataSourceID,在您的情况下,应为DataSourceID = "SqlDataSource1"。此方法使用声明性数据源控件并以声明方式将数据绑定到网格。 (无需额外编码)

  2. 添加NeedDataSource事件并在后面的代码中分配您的数据源,在您的情况下,应该像这样完成

  3. 方法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

答案 1 :(得分:0)

我需要同时实现这两种方法。解决方案如下:

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