DataGrid编辑更新时数据类型不匹配

zytp 2003-09-01 09:32:33
<%@Page Language="C#"%>

<%@Import Namespace="System.Data" %>
<%@Import Namespace="System.Data.OleDb" %>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head>
<title>Editing Data in a DataGrid Control</title>
</head>
<body bgcolor="#ffffff">
<span class="heading">Editing Data in a DataGrid Control</span><hr />

<%-- insert connection string script --%>

<div id="outError" runat="server" />

<ASP:Label id="lblSQL" runat="server" /><p />

<form runat="server">

<ASP:DataGrid id="MyDataGrid" runat="server"
CellPadding = "2"
EditItemStyle-BackColor="#eaeaea"
DataKeyField="id"
OnEditCommand="DoItemEdit"
OnUpdateCommand="DoItemUpdate"
OnCancelCommand="DoItemCancel"
AutoGenerateColumns="False">

<Columns>

<ASP:BoundColumn DataField="id" HeaderText="id" ReadOnly="True" />

<ASP:TemplateColumn HeaderText="Title">
<ItemTemplate>
<ASP:Label Text='<%# DataBinder.Eval(Container.DataItem, "Title") %>' runat="server" />
</ItemTemplate>
<EditItemTemplate>
<ASP:TextBox id="txtTitle" Size="60"
Text='<%# DataBinder.Eval(Container.DataItem, "Title") %>' runat="server" />
</EditItemTemplate>
</ASP:TemplateColumn>



<ASP:EditCommandColumn
EditText="Edit"
CancelText="Cancel"
UpdateText="Update" />

</Columns>

</ASP:DataGrid>

</form>

<!--------------------------------------------------------------------------->

<script language="C#" runat="server">

public void Page_Load(Object sender, EventArgs e)
{
if (!Page.IsPostBack)
BindDataGrid(); // create data set and bind to grid control
}


public void DoItemEdit(Object objSource, DataGridCommandEventArgs objArgs)
{

// set the EditItemIndex property of the grid to this item's index
MyDataGrid.EditItemIndex = objArgs.Item.ItemIndex;
BindDataGrid(); // bind the data and display it
}


public void DoItemUpdate(Object objSource, DataGridCommandEventArgs objArgs)
{
TextBox objTitleCtrl = (TextBox)objArgs.Item.FindControl("txtTitle");
string strConnect = "Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source="+Server.MapPath("./databases/bns.mdb");
string strSQL = "UPDATE Booklist SET Title='" + objTitleCtrl.Text + "' "+ "WHERE id='" + MyDataGrid.DataKeys[objArgs.Item.ItemIndex] + "'";

try
{
OleDbConnection objConnect = new OleDbConnection(strConnect);
OleDbCommand objCommand = new OleDbCommand(strSQL,objConnect);
objConnect.Open();
objCommand.ExecuteNonQuery();
}
catch (Exception objError)
{
outError.InnerHtml = "<b>* Error while accessing data</b>.<br />"
+ objError.Message + "<br />" + objError.Source + "<p />";
return;
}

MyDataGrid.EditItemIndex = -1;
BindDataGrid(); // bind the data and display it
}


public void DoItemCancel(Object objSource, DataGridCommandEventArgs objArgs)
{
// set EditItemIndex property of grid to -1 to switch out of Edit mode
MyDataGrid.EditItemIndex = -1;
BindDataGrid();
}




public void BindDataGrid()
{

string strConnect = "Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source="+Server.MapPath("./databases/WroxBooks.mdb");

string strSelect = "SELECT * FROM BookList ";


OleDbDataReader objDataReader;

try
{
OleDbConnection objConnect = new OleDbConnection(strConnect);


objConnect.Open();


OleDbCommand objCommand = new OleDbCommand(strSelect, objConnect);


objDataReader = objCommand.ExecuteReader();
}
catch (Exception objError)
{

outError.InnerHtml = "<b>* Error while accessing data</b>.<br />"
+ objError.Message + "<br />" + objError.Source + "<p />";
return;
}


MyDataGrid.DataSource = objDataReader;
MyDataGrid.DataBind();
}

</script>


</body>
</html>

当点击更新时objError提示错误,在标准表达式中数据类型不匹配

这是怎么回事,我是照着asp.net高级编程的源代码改的,就是跟原来的差了一个字段,就是不好使,!
哪位做过这样的程序,告知是什么回事,
或者你有这样的源代码给偶一份,谢谢
...全文
67 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zytp 2003-09-01
  • 打赏
  • 举报
回复
22,10,20,,20,2,20,6,
贴子回复次数大于跟给分次数
晕给分给不出去了,今天没空了,下次有时间另开贴给分!
zytp 2003-09-01
  • 打赏
  • 举报
回复
谢谢各位老大们,我试试
azev 2003-09-01
  • 打赏
  • 举报
回复
错了

这样
MyDataGrid.DataKeys[objArgs.Item.ItemIndex]
-->
MyDataGrid.DataKeys[objArgs.Item.ItemIndex].ToString()
azev 2003-09-01
  • 打赏
  • 举报
回复
错了

这样
MyDataGrid.DataKeys[objArgs.Item.ItemIndex]
-->
MyDataGrid.DataKeys[objArgs.Item.ItemIndex].ToString()
azev 2003-09-01
  • 打赏
  • 举报
回复
照 chnking(kent) 说的改
MyDataGrid.DataKeys[objArgs.Item.ItemIndex]
-->
MyDataGrid.DataKeys[objArgs.Item.ItemIndex].ToString
seesea125 2003-09-01
  • 打赏
  • 举报
回复
高级编程书上isbn字段是字符类型的,所以他加'',你的数据库字段是什么类型?是整形的必须转换
zytp 2003-09-01
  • 打赏
  • 举报
回复
id是数字,ID需要转换吗,下面这个是高级编程里的程序,没有转换,但是它那个好使,
<%@Page Language="C#"%>

<%@Import Namespace="System.Data" %>
<%@Import Namespace="System.Data.OleDb" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head>
<title>Editing Data in a DataGrid Control</title>
</head>
<body bgcolor="#ffffff">
<span class="heading">Editing Data in a DataGrid Control</span><hr />
<!--------------------------------------------------------------------------->

<div id="outError" runat="server" />

<ASP:Label id="lblSQL" runat="server" /><p />

<form runat="server">

<ASP:DataGrid id="MyDataGrid" runat="server"
CellPadding = "2"
EditItemStyle-BackColor="yellow"
DataKeyField="ISBN"
OnEditCommand="DoItemEdit"
OnUpdateCommand="DoItemUpdate"
OnCancelCommand="DoItemCancel"
AutoGenerateColumns="False">

<Columns>

<ASP:BoundColumn DataField="ISBN" HeaderText="ISBN" ReadOnly="True" />

<ASP:TemplateColumn HeaderText="Title">
<ItemTemplate>
<ASP:Label Text='<%# DataBinder.Eval(Container.DataItem, "Title") %>' runat="server" />
</ItemTemplate>
<EditItemTemplate>
<ASP:TextBox id="txtTitle" Size="60"
Text='<%# DataBinder.Eval(Container.DataItem, "Title") %>' runat="server" />
</EditItemTemplate>
</ASP:TemplateColumn>

<ASP:BoundColumn DataField="PublicationDate" HeaderText="Published" />

<ASP:EditCommandColumn
EditText="Edit"
CancelText="Cancel"
UpdateText="Update" />

</Columns>

</ASP:DataGrid>

</form>

<!--------------------------------------------------------------------------->

<script language="C#" runat="server">

public void Page_Load(Object sender, EventArgs e)
{
if (!Page.IsPostBack)
BindDataGrid(); // create data set and bind to grid control
}


public void DoItemEdit(Object objSource, DataGridCommandEventArgs objArgs)
{

// set the EditItemIndex property of the grid to this item's index
MyDataGrid.EditItemIndex = objArgs.Item.ItemIndex;
BindDataGrid(); // bind the data and display it
}


public void DoItemUpdate(Object objSource, DataGridCommandEventArgs objArgs)
{
TextBox objTitleCtrl = (TextBox)objArgs.Item.FindControl("txtTitle");
TextBox objPubDateCtrl = (TextBox)objArgs.Item.Cells[2].Controls[0];
string strConnect = "Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source="+Server.MapPath("./databases/WroxBook.mdb");
string strSQL = "UPDATE Booklist SET Title='" + objTitleCtrl.Text + "', "
+ "PublicationDate='" + objPubDateCtrl.Text + "' "
+ "WHERE ISBN='" + MyDataGrid.DataKeys[objArgs.Item.ItemIndex] + "'";
// get a reference to the title and publication date text boxes
OleDbConnection objConnect = new OleDbConnection(strConnect);
OleDbCommand objCommand = new OleDbCommand(strSQL,objConnect);
objConnect.Open();

// create a suitable SQL statement and execute it

objCommand.ExecuteNonQuery();

// set EditItemIndex property of grid to -1 to switch out of Edit mode
MyDataGrid.EditItemIndex = -1;
BindDataGrid(); // bind the data and display it
}


public void DoItemCancel(Object objSource, DataGridCommandEventArgs objArgs)
{
// set EditItemIndex property of grid to -1 to switch out of Edit mode
MyDataGrid.EditItemIndex = -1;
BindDataGrid(); // bind the data and display it
}




public void BindDataGrid()
{

string strConnect = "Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source="+Server.MapPath("./databases/WroxBook.mdb");

string strSelect = "SELECT * FROM BookList WHERE ISBN LIKE '%18610025%'";


OleDbDataReader objDataReader;

try
{
OleDbConnection objConnect = new OleDbConnection(strConnect);


objConnect.Open();


OleDbCommand objCommand = new OleDbCommand(strSelect, objConnect);


objDataReader = objCommand.ExecuteReader();
}
catch (Exception objError)
{

outError.InnerHtml = "<b>* Error while accessing data</b>.<br />"
+ objError.Message + "<br />" + objError.Source + "<p />";
return; // and stop execution
}

// set the DataSource property and bind the grid
MyDataGrid.DataSource = objDataReader;
MyDataGrid.DataBind();
}

</script>

<!--------------------------------------------------------------------------->
<hr /><span class="cite">[<a href="../global/viewsource.aspx">view source</a>]        
+copy;2001 <a class="cite" href="http://www.wrox.com/">Wrox Press</a> -
<a class="cite" href="http://www.wrox.com/Books/Book_Details.asp?isbn=1861004885">Professional ASP.NET</a> (ISBN: 1-861004-88-5)</span>
</body>
</html>
chnking 2003-09-01
  • 打赏
  • 举报
回复
string strSQL = "UPDATE Booklist SET Title='" + objTitleCtrl.Text + "' "+ "WHERE id='" + MyDataGrid.DataKeys[objArgs.Item.ItemIndex] + "'";
-->
string strSQL = "UPDATE Booklist SET Title='" + objTitleCtrl.Text + "' "+ "WHERE id='" + MyDataGrid.DataKeys[objArgs.Item.ItemIndex].ToString + "'";
码视野 2003-09-01
  • 打赏
  • 举报
回复
asp.net高级编程的源代码再wrox.com上面有下载!!

用楼上的方法解决了吧??
seesea125 2003-09-01
  • 打赏
  • 举报
回复
提示的哪一行错误?
sql的UPDATE Booklist SET Title='" + objTitleCtrl.Text + "' "+ "WHERE id='" + MyDataGrid.DataKeys[objArgs.Item.ItemIndex] + "'";
如果id是整形,那么id=后边不要加'',并把MyDataGrid.DataKeys[objArgs.Item.ItemIndex]转换成整形,用convert.int32()函数

62,266

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧