DataGrid1.DataKeys[(int)e.Item.ItemIndex]没有获得值,请查一下你的程序,是否定义了DATAKEY
解决方案 »
- xml文件保存为二进制到数据库,再读取出来出错!问题出在哪里??
- 求助,关于正则表达式的!
- 100分求《C#数据安全手册》《C#WEB服务高级编程》的电子书 最好是pdf的
- asp.net网站中文和英文切换实现
- 如何在自定义itemtemplate的datalist中,找出定义的checkbox
- 有关登陆和注册的问题
- 在datalist中利用模版进行编辑,关于新编辑窗口打开的问题
- 谁有.net。c#的作业发布系统!!!
- vs2005 中的gridview,自定义模板列,添加一个button 点击为什么不能触发rowcommand事件
- 怎么样在网页中使用treeview建立树型结构?
- DataGrid提供的数据更新功能的问题!!
- 300分求一个解决方案!!!!!!!!!!!!!!!!!!!!!!
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.OleDb.OleDbException: 参数 @Id 没有默认值。源错误:
行 54:
行 55: Comm.Connection.Open();
行 56: Comm.ExecuteNonQuery();
行 57: Comm.Connection.Close();
行 58: BindGrid();
源文件: F:\shop\admin_addbigclass.aspx.cs 行: 56
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Page Language="VB" %>
<script runat="server"> Dim conNorthwind As SqlConnection
Dim cmdSql As Sqlcommand
Dim strSql As String
Sub Page_Load
conNorthwind = New SqlConnection("Server=localhost;UID=sa;PWD=;Database=Northwind")
If Not IsPostBack Then
BindDataGrid
End If
End Sub
Sub BindDataGrid
cmdSql = New SqlCommand("Select * From Products", conNorthwind )
conNorthwind.Open()
dgrdProducts.DataSource = cmdSql.ExecuteReader()
dgrdProducts.DataBind()
conNorthwind.Close()
End Sub
Sub drgdProducts_EditCommand( s As Object, e As DataGridCommandEventArgs)
dgrdProducts.EditItemIndex = e.Item.ItemIndex
BindDataGrid
End Sub
Sub dgrdProducts_UpdateCommand(s As Object,e As DataGridCommandEventArgs)
Dim intProductID As Integer
Dim txtUnitPrice As TextBox
Dim decUnitPrice As Decimal
If IsValid Then
intProductID = dgrdProducts.DataKeys( e.Item.ItemIndex )
txtUnitPrice = e.Item.FindControl("txtUnitPrice")
decUnitPrice = txtUnitPrice.Text
strSql = "Updata Products Set UnitPrice=@UnitPrice" _
& "Where ProductID=@ProductID"
cmdSql = New SqlCommand(strSql, conNorthwind )
cmdSql.Parameters.Add("@UnitPrice",decUnitPrice )
cmdSql.Parameters.Add("@ProductID",intProductID )
conNorthwind.Open()
cmdSql.ExecuteNonQuery()
conNorthwind.Close()
dgrdProducts.EditItemIndex = -1
BindDataGrid
End If
End Sub
Sub dgrdProducts_CancelCommand( s As Object, e As DataGridCommandEventArgs )
dgrdProducts.EditItemIndex = -1
End Sub</script>
<html>
<head>
</head>
<body>
<form runat="server">
<!-- Insert content here -->
<asp:DataGrid id="dgrdProducts" runat="server" HeaderStyle-BackColor="Salmon" CellPadding="10" AutoGenerateColumn="False" DataKeyField="ProductID" OnCancelCommadn="dgrdProducts_CancelCommand" OnUpdateCommad="dgrdProducts_UpdateCommand" OnEditCOmmand="drgdProducts_EditCommand">
<Columns>
<asp:BoundColumn HeaderText="Product Name" DataField="ProductName" ReadOnly="True" />
<asp:TemplateColumn>
<HeaderTemplate>
Price
</HeaderTemplate>
<ItemTemplate>
<%# Container.DataItem("UnitPrice") %>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox id="txtUnitPrice" Text='<%# Container.DataItem( "UnitPrice" ) %>' Runat="server" />
<asp:RequiredFieldValidator ControlToValidate="txtUnitPrice" Display="Dynamic" Text="Required!" Runat="Server" />
<asp:CompareValidator ControlToValidate="txtUnitPrice" Display="Dynamic" Text="Must be Currency!" Operator="DataTypeCheck" Type="Currency" Runat="Server" />
</EditItemTemplate>
</asp:TemplateColumn>
<asp:EditCommandColumn EditText="Edit!" UpdateText="Update!" CancelText="Cancel!" />
</Columns>
</asp:DataGrid>
</form>
</body>
</html>
private void UpdateInvoice()
{
string Upt="UPDATE invoice SET 购货单位=@购货单位,日期=@日期,货名及规格=@货名及规格,单位=@单位,数量=@数量,单价=@单价,金额=@金额,已报销=@已报销,图片名称=@图片名称,备注=@备注 WHERE 编号=@编号";
da.UpdateCommand=new OleDbCommand(Upt,conn);
OleDbParameter Para;
//下面这些参数添加的先后顺序一定要和SQL语句中的顺序一致,其中WHERE子句中的参数位于最后,也就是要严格一致才行!
Para=da.UpdateCommand.Parameters.Add("@购货单位",OleDbType.Char);
Para.SourceColumn="购货单位";
Para.SourceVersion=DataRowVersion.Current;
Para=da.UpdateCommand.Parameters.Add("@日期",OleDbType.Char);
Para.SourceColumn="日期";
Para.SourceVersion=DataRowVersion.Current;
Para=da.UpdateCommand.Parameters.Add("@货名及规格",OleDbType.Char);
Para.SourceColumn="货名及规格";
Para.SourceVersion=DataRowVersion.Current;
Para=da.UpdateCommand.Parameters.Add("@单位",OleDbType.Char);
Para.SourceColumn="单位";
Para.SourceVersion=DataRowVersion.Current;
Para=da.UpdateCommand.Parameters.Add("@数量",OleDbType.Char);
Para.SourceColumn="数量";
Para.SourceVersion=DataRowVersion.Original;
Para=da.UpdateCommand.Parameters.Add("@单价",OleDbType.Char);
Para.SourceColumn="单价";
Para.SourceVersion=DataRowVersion.Original;
Para=da.UpdateCommand.Parameters.Add("@金额",OleDbType.Char);
Para.SourceColumn="金额";
Para.SourceVersion=DataRowVersion.Original;
Para=da.UpdateCommand.Parameters.Add("@已报销",OleDbType.Char);
Para.SourceColumn="已报销";
Para.SourceVersion=DataRowVersion.Current;
Para=da.UpdateCommand.Parameters.Add("@图片名称",OleDbType.Char);
Para.SourceColumn="图片名称";
Para.SourceVersion=DataRowVersion.Current;
Para=da.UpdateCommand.Parameters.Add("@备注",OleDbType.Char);
Para.SourceColumn="备注";
Para.SourceVersion=DataRowVersion.Current;
Para=da.UpdateCommand.Parameters.Add("@编号",OleDbType.BigInt);
Para.SourceColumn="编号";
Para.SourceVersion=DataRowVersion.Original;
if(MessageBox.Show("你真的要保存对数据库所做的更改吗?","确认!",MessageBoxButtons.OKCancel,MessageBoxIcon.Question)==DialogResult.OK)
{
da.Update(ds,"invoice");
dataGridInvoice.SetDataBinding(ds,"invoice");
}
}
确保id绑定在datagrid1上,
而且id这一列不为空
(int)(DataGrid1.DataKeys[(int)e.Item.ItemIndex]);另外:
我觉得不如这样获得id的值,e.Item.cells(1)----1为id在datagrid1的一行的位置索引
Comm.Parameters["@Id"].Value = (int)e.Item.cells(1)