Я использую ASP.NET 2.0 и VS 2005. Мне нужно заполнить сетку на панели обновления из рефкурсора Oracle после того, как пользователь щелкнет кнопку. У меня есть пример из другого проекта, но он довольно сложный. Есть ли простой способ отобразить данные в сетке на панели обновления? Мы не хотим, чтобы данные отображались при первом открытии вкладки сразу после того, как пользователь нажимает кнопку.
TIA, Это





Я публикую здесь код, потому что это сложно понять и исследовать. вот один простой способ сделать это с помощью поставщика данных Microsoft Oracle (я предпочитаю ODP.NET):
<%@ Page Language = "C#" AutoEventWireup = "true" %>
<%@ Import Namespace = "System.Data" %>
<%@ Import Namespace = "System.Data.OracleClient" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns = "http://www.w3.org/1999/xhtml">
<head runat = "server">
<title>GridView w/ Oracle Ref Cursor</title>
<style type = "text/css">
body {padding:25px;}
.Button1 {margin:35px 0;}
</style>
<script runat = "server" type = "text/C#">
protected void Page_Load(object sender, EventArgs e) {
}
protected void Button1_Click(object sender, EventArgs e) {
var dataSet = new DataSet();
// get connection string from web.config
var connStr = ConfigurationManager.ConnectionStrings["ConnStr1"].ConnectionString;
// create connection
using (var conn = new OracleConnection(connStr)) {
// create & define the parameter
var refCursorParam = new OracleParameter();
refCursorParam.ParameterName = "RET";
refCursorParam.OracleType = OracleType.Cursor;
refCursorParam.Direction = ParameterDirection.Output;
// create & define the command
var cmd = new OracleCommand();
cmd.CommandText = "GET_ALL_EMPS";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(refCursorParam);
cmd.Connection = conn;
// use data adapter to fill dataset
using (var adapter = new OracleDataAdapter(cmd))
adapter.Fill(dataSet);
}
// set some gridview properties
GridView1.AllowPaging = true;
GridView1.PageSize = 5;
// bind dataset to grid
GridView1.DataSourceID = null;
var dv = dataSet.Tables[0].AsDataView();
// save dataview to session so gridview can be re-bound later
Session["dataView"] = dv;
GridView1.DataSource = dv;
GridView1.DataBind();
pCount.InnerText = "Total Row Count: " + dataSet.Tables[0].Rows.Count.ToString();
// dispose of dataset
dataSet.Dispose();
}
void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) {
// get dataview from session
var dv = (DataView)Session["dataView"];
GridView1.DataSource = dv;
GridView1.PageIndex = e.NewPageIndex;
GridView1.DataBind(); // re-bind data
}
</script>
</head>
<body>
<form id = "form1" runat = "server">
<asp:ScriptManager ID = "ScriptManager1" runat = "server" />
<div>
<asp:UpdatePanel id = "updatepanel1" runat = "server">
<ContentTemplate>
<asp:Button ID = "Button1"
runat = "server"
Text = "Refresh GridView"
OnClick = "Button1_Click" />
<p id = "pCount" runat = "server" />
<asp:GridView ID = "GridView1"
runat = "server"
OnPageIndexChanging = "GridView1_PageIndexChanging" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
</body>
</html>
попробуйте это и дайте мне знать, если у вас возникнут вопросы. вот несколько хороших ссылок:
-gabe
эй, это здорово! Я рад, что это помогло.
Спасибо, Гейб! Этот код направил меня в правильном направлении, и я заставил его работать.