我用的是模板列,里面放Checkbox控件,后台程序用循环判断来删除所选择的数据行,一般来说传递的参数是DataKeyField里的字段,而我的表是双主键,如何删除?代码如下:前台代码:
<asp:datagrid id="DataGrid1" runat="server" DataKeyField="fClientN".....>
<Columns><asp:TemplateColumn HeaderText="删除勾选">
<ItemTemplate>
<asp:CheckBox id="DeleteorNot" Checked="False" runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="购买">
<ItemTemplate>
<asp:HyperLink id=HyperLink1 runat="server" Target=_blank Text='<%# DataBinder.Eval(Container, "DataItem.fClientN")%>' NavigateUrl='<%# "TrainRecordPreview.aspx?ClientN=" & DataBinder.Eval(Container, "DataItem.fClientN") & "&TrainDate=" & DataBinder.Eval(Container, "DataItem.fTrainDate")%>'/>
</ItemTemplate>
</asp:TemplateColumn> <asp:BoundColumn DataField="fTrainDate" HeaderText="授课日期" DataFormatString="{0:d}">
</asp:BoundColumn>
...........
略了其他绑定列
..........
</Columns>
</asp:datagrid>
后台:
..........
cmd.Parameters.Add("@ClientN", SqlDbType.Char, 60)
cmd.Parameters.Add("@TrainDate", SqlDbType.SmallDateTime)
我用的是存储过程,传递如上两个参数
........
For Each CheckBoxItem In DataGrid1.Items If CType(CheckBoxItem.FindControl("DeleteorNot"), CheckBox).Checked Then cmd.Parameters("@ClientN").Value = DataGrid1.DataKeys(CheckBoxItem.ItemIndex)
这两个参数所涉及的字段都在绑定列中,上面一个为datakeyfield的字段内容,不必多说,
如果改表是单主键,用它就可以了,而我的表是双主键,必须再传递下面一个参数,数据库 才能知道删除哪个?怎么给它赋值?
cmd.Parameters("@TrainDate").Value = ?????????
con.Open() Try
cmd.ExecuteNonQuery()
message.Text = "记录成功删除"
Catch exc As SqlException
message.Text = "错误:记录没有成功删除"
End Try con.Close()
End If
Next这是我第一次发帖子,分不多,各位照顾一下,拜托
<asp:datagrid id="DataGrid1" runat="server" DataKeyField="fClientN".....>
<Columns><asp:TemplateColumn HeaderText="删除勾选">
<ItemTemplate>
<asp:CheckBox id="DeleteorNot" Checked="False" runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="购买">
<ItemTemplate>
<asp:HyperLink id=HyperLink1 runat="server" Target=_blank Text='<%# DataBinder.Eval(Container, "DataItem.fClientN")%>' NavigateUrl='<%# "TrainRecordPreview.aspx?ClientN=" & DataBinder.Eval(Container, "DataItem.fClientN") & "&TrainDate=" & DataBinder.Eval(Container, "DataItem.fTrainDate")%>'/>
</ItemTemplate>
</asp:TemplateColumn> <asp:BoundColumn DataField="fTrainDate" HeaderText="授课日期" DataFormatString="{0:d}">
</asp:BoundColumn>
...........
略了其他绑定列
..........
</Columns>
</asp:datagrid>
后台:
..........
cmd.Parameters.Add("@ClientN", SqlDbType.Char, 60)
cmd.Parameters.Add("@TrainDate", SqlDbType.SmallDateTime)
我用的是存储过程,传递如上两个参数
........
For Each CheckBoxItem In DataGrid1.Items If CType(CheckBoxItem.FindControl("DeleteorNot"), CheckBox).Checked Then cmd.Parameters("@ClientN").Value = DataGrid1.DataKeys(CheckBoxItem.ItemIndex)
这两个参数所涉及的字段都在绑定列中,上面一个为datakeyfield的字段内容,不必多说,
如果改表是单主键,用它就可以了,而我的表是双主键,必须再传递下面一个参数,数据库 才能知道删除哪个?怎么给它赋值?
cmd.Parameters("@TrainDate").Value = ?????????
con.Open() Try
cmd.ExecuteNonQuery()
message.Text = "记录成功删除"
Catch exc As SqlException
message.Text = "错误:记录没有成功删除"
End Try con.Close()
End If
Next这是我第一次发帖子,分不多,各位照顾一下,拜托
DataRow foundRow;
// Create an array for the key values to find.
object[]findTheseVals = new object[3];
// Set the values of the keys to find.
findTheseVals[0] = "John";
findTheseVals[1] = "Smith";
findTheseVals[2] = "5 Main St.";
foundRow = myTable.Rows.Find(findTheseVals);
// Display column 1 of the found row.
if(foundRow != null)
Console.WriteLine(foundRow[1]);
}
注意多个主键组合后,确定其必须唯一.......
dim cdate as string
cdate=ctype(e.item.cells(授課日期所在datagrid是第幾列,從0開始).controls(0),textbox).text
然後再將其轉換為日期的格式
cmd.Parameters("@TrainDate").Value =Convert.ToDateTime(mid(cdate,5,2) & "/" & right(cdate,2) & "/" & left(cdate,4))
我是用vb写的,e.item.出错,请问怎么回事呀?
象楼主这样的问题,可以把表里面的两个主键,组成成一个主键,比如
sql = "select columa||','||columb from table";
两个主键组合在一起,肯定能够实现唯一。那么在取值的时候,如平常一样取,只是判断的时候这样判断
sql = "update table set xxx=xxx where columa||','||columb = '" + 取到的值 + "'"
我以前也这么搞的,多绑定一个列,设为隐藏列(如果不想这个列显示在页面上的话)
你就可以把
cmd.Parameters("@TrainDate").Value =那个列的值了
我也是用VB.NET寫的,你是不是寫在OnDeleteCommand事件中?如果是就會找到e.item