Я хочу перейти от использования декларативных элементов управления SqlDataSource на странице aspx к коду позади.
Как мне кодировать обработчики для таких событий, как Selected, Selecting, PreRender и т. Д., Если нет идентификатора источника данных? Если есть лучший способ сделать это, пожалуйста, дайте мне знать.
//With a datasource named MyDS, I can do this in ASPX:
<asp:GridView ID="gvReport" runat="server" DataSourceID="ID="MyDS"> </asp:GridView>
<asp:SqlDataSource ID="MyDS" runat="server" ConnectionString="<%$ ConnectionStrings:csM7DB02 %>"
SelectCommand="SELECT Top(50) M7Sd.StudyID FROM StudyData M7Sd"
OnSelecting="MyDS_Selecting" OnSelected="MyDS_Selected">
</asp:SqlDataSource>
//And this in code behind:
protected void MyDS_Selecting(object sender, SqlDataSourceSelectingEventArgs e) {
e.Command.CommandTimeout = 180; //Change timeout for slow queries
}
//BUT, if I don't use a datasource control in ASPX, I won't have a datasource ID to name the handlers.
//So how can I code handler for the datasource events using the following approach?
//ASPX:
<asp:GridView ID="gvReport" runat="server"> </asp:GridView> //NOT USING A DATASOURCE
//CODE BEHIND:
protected void Page_Load(object sender, EventArgs e) {
if ( ! IsPostBack ) {
GetData();
}
}
private void GetData() {
DataTable table = new DataTable();
using (SqlConnection conn = new SqlConnection(constr)) {
string sql = "SELECT Top(50) M7Sd.StudyID FROM StudyData M7Sd";
using (SqlCommand cmd = new SqlCommand(sql, conn)) {
using (SqlDataAdapter ad = new SqlDataAdapter(cmd)) {
ad.Fill(table);
}
}
}
gvReport.DataSource = table;
gvReport.DataBind();
}