谁能帮我看看这个代码问题出在哪里了呀?(100分)

  • 主题发起人 delphibbs_wayne
  • 开始时间
D

delphibbs_wayne

Unregistered / Unconfirmed
GUEST, unregistred user!
这个代码是要显示两个表格,利用数据绑定的方法。一个表格是直接显示表的内容,另一个是要在原有数据上加一条记录,然后显示出来。代码如下:
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<script Language="c#" runat="server">
void Page_Load()
{
if(!(Page.IsPostBack))
{
BindGrid();
}
}

private void Page_Index(Object sender,DataGridPageChangedEventArgs e)
{
myDataGrid.CurrentPageIndex = e.NewPageIndex;
BindGrid();
}

private void BindGrid()
{
string strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(".//Northwind.mdb");
string strSQL = "SELECT FirstName,LastName FROM Employees";

OleDbConnection objConnection = new OleDbConnection(strConnection);
OleDbDataAdapter objAdapter = new OleDbDataAdapter(strSQL,objConnection);
DataSet objDataSet = new DataSet();
try
{
objAdapter.Fill(objDataSet,"Employees");
myDataGrid.DataSource = objDataSet.Tables["Employees"].DefaultView;
myDataGrid.DataBind();
}
catch(Exception e)
{
con_open.Text = "Connection failed to open successfully.<br/>";
con_close.Text = e.ToString();
}
finally
{
objConnection.Close();
}
}

private void AddData(Object sender,EventArgs e)
{
DataTable objTable = objDataSet.Tables["Employees"];
DataRow objNewRow = objTable.NewRow();
objNewRow["FirstName"] = "Norman";
objNewRow["LastName"] = "Blake";
objTable.Rows.Add(objNewRow);

OleDbCommandBuilder objBulider = new OleDbCommandBuilder(objAdapter);
objAdapter.UpdateCommand = objBuilder.GetUpdateCommmand();
objAdapter.InsertCommand = objBuilder.GetInsertCommand();
objAdapter.DeleteCommand = objBuilder.GetDeleteCommand();

objAdapter.Update(objDataSet,"Employees");

strSQL = "SELECT FirstName,LastName FROM Employees";
objConnection.Open();
OleDbCommand objCommand = new OleDbCommand(strSQL,objConnection);

UpdateDataGrid.DataSource = objCommand.ExecuteReader(CommandBehavior.CloseConnection);
UpdateDataGrid.DataSource = DateBind();
}

private void DataAdapterUpdate(Object sender,EventArgs e)
{
BindGrid();
AddData();
}

</script>
<html>
<head>
<title>DataAdapterUpdate</title>
</head>

<body>
<form runat="server">
<asp:datagrid id="myDataGrid" runat="server"
AllowPaging="True"
PageSize="5"
PagerStyle-Mode="NumericPages"
PagerStyle-HorizontalAlign="Right"
OnPageIndexChanged="Page_Index"

CellPadding="3"
Font-Name="arial"
Font-Size="8pt"
HeaderStyle-BackColor="#dcdcdc"
HeaderStyle-ForeColor="blue"
/>
</form>
<hr>
<asp:button id="UpdateButton" onclick="DataAdapterUpdate" runat="server"/>
<asp:datagrid id="UpdateDataGrid" runat="server"
AllowPaging="True"
PageSize="5"
PagerStyle-Mode="NumericPages"
PagerStyle-HorizontalAlign="Right"
OnPageIndexChanged="Page_Index"

CellPadding="3"
Font-Name="arial"
Font-Size="8pt"
HeaderStyle-BackColor="#dcdcdc"
HeaderStyle-ForeColor="blue"
/>
<asp:label id="con_open" runat="server"/>
<asp:label id="con_close" runat="server"/>
</body>
</html>

现在报错为:
编译错误
说明: 在编译向该请求提供服务所需资源的过程中出现错误。请检查下列特定错误详细信息并适当地修改源代码。
编译器错误信息: CS0246: 找不到类型或命名空间名称“objDataSet”(是否缺少 using 指令或程序集引用?)
源错误:

行 58: private void AddData(Object sender,EventArgs e)
行 59: {
行 60: DataTable objTable = objDataSet.Tables["Employees"];
行 61: DataRow objNewRow = objTable.NewRow();
行 62: objNewRow["FirstName"] = "Norman";

源文件: C:/MyWeb/test/dataAdapterupdate.aspx 行: 60

我不知道是什么原因了,请哪位兄弟花点时间,帮忙看看,谢谢!
 
顶顶。看不懂!
 
很明显,你的objDataSet变量在AddData中未声明
 
如何做呢,如果objDataSet要声明,那objAdapter不是也要声明吗?具体代码是什么呀?
 
当你使用代码后置时,你可以按下面的方式添加你的全局变量:
文件webform1.aspx.cs
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.HtmlControls.HtmlGenericControl FONT1;
protected System.Web.UI.WebControls.Label Label1;
protected DataSet objDataSet;
... ...
}

如果你还要用混合代码的形式,就自己写一个类文件来处理与数据库的连接,
执行返回数据表等功能.
 
补充:
混合代码方式下,如果想定义全局变量的话,就在
<script Language="c#" runat="server"> 后面写,如:
public Dataset objDataSet;
public DataAdapter objDataAdapter;
这样各个函数都可以访问了.
还有一种很不好的方法,就是用ViewState来存储需要传递的数据,这样会比较浪费
一点,例如你的例子里可以在binddata()中加入ViewState["myds"]=objDataset;
然后在adddata()中使用 DataSet objDataset = (DataSet)ViewState["myds"].程序
就能使用了,不过不推介这种方法.
 
顶部