我正在尝试以声明方式使用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();
答案 0 :(得分:1)
有两种方法可以做到这一点
将您的数据源控件ID分配给属性DataSourceID
,在您的情况下,应为DataSourceID = "SqlDataSource1"
。此方法使用声明性数据源控件并以声明方式将数据绑定到网格。 (无需额外编码)
添加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
答案 1 :(得分:0)
我需要同时实现这两种方法。解决方案如下:
grvUpdate.DataSource = ds.Tables[0];
grvUpdate.DataSourceID = String.Empty;
grvUpdate.DataBind();