我有一个GridView,其中我有复选框作为项目模板,我在更改复选框时更新GridView。这是我的GridView代码:
<Columns>
<telerik:GridTemplateColumn>
<ItemTemplate>
<asp:CheckBox ID="chkcelar" runat="server" Text="Clear" OnCheckedChanged="chkclearchng" AutoPostBack="true"/>
</ItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridBoundColumn DataField="BPV_NUM" DataType="System.Int64"
DefaultInsertValue="" HeaderText="BPV No" SortExpression="BPV_NUM"
UniqueName="BPV_NUM">
</telerik:GridBoundColumn>
</Columns>
这是我正在更新网格视图的c#代码
protected void chkclearchng(object sender, EventArgs e)
{
OleDbConnection con = new OleDbConnection("Data Source=sml; User ID=sml; Password=sml; provider=OraOLEDB.Oracle");
OleDbCommand cmd = new OleDbCommand();
CheckBox chkcelar = ((CheckBox)(sender));
GridDataItem row = ((GridDataItem)(chkcelar.NamingContainer));
long bpvnum = row.Cells[1].Text;
if (chkcelar.Checked ) {
cmd.CommandText = @"update sml.FND_01_11@wbg set CLR_FLG=1, CLR_DTE=sysdate where bpv_num=:bpv_num and bpv_dte=:bpv_dte";
}
else {
cmd.CommandText = @"update sml.FND_01_11@wbg set CLR_FLG=0, CLR_DTE=sysdate where bpv_num=:bpv_num and bpv_dte=:bpv_dte";
}
cmd.CommandType = CommandType.Text;
cmd.Connection = con;
cmd.Parameters.Add(":bpv_num",OleDbType.BigInt).Value = bpvnum;
cmd.Parameters.Add(":bpv_dte",OleDbType.Date).Value = RadComboBox1.SelectedValue;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
问题是当我更改复选框时会出现此错误:
输入字符串的格式不正确。
任何人都可以说出可能存在的问题,我该如何解决?
答案 0 :(得分:1)
可能你应该使用
long bpvnum = long.Parse(row.Cells[1].Text);
如果在此行上不起作用
cmd.Parameters.Add(":bpv_dte",OleDbType.Date).Value = RadComboBox1.SelectedValue
您需要参数类型OleDbType.Date
,但是您要分配RadComboBox1.SelectedValue
所以你需要转换你的
RadComboBox1.SelectedValue to OleDbType.Date
或者您应该只使用DateTimePicker 而不是ComboBox
答案 1 :(得分:1)
更改您的代码:
protected void chkclearchng(object sender, EventArgs e)
{
using (OleDbConnection con = new OleDbConnection("Data Source=sml; User ID=sml; Password=sml; provider=OraOLEDB.Oracle"))
{
con.Open();
using (OleDbCommand cmd = new OleDbCommand(null, con))
{
CheckBox chkcelar = ((CheckBox)(sender));
GridDataItem row = ((GridDataItem)(chkcelar.NamingContainer));
long bpvnum = Convert.ToInt64(row.Cells[1].Text);
if (chkcelar.Checked)
{
cmd.CommandText = @"update sml.FND_01_11@wbg set CLR_FLG=1, CLR_DTE=sysdate where bpv_num=@bpv_num and bpv_dte=@bpv_dte";
}
else
{
cmd.CommandText = @"update sml.FND_01_11@wbg set CLR_FLG=0, CLR_DTE=sysdate where bpv_num=@bpv_num and bpv_dte=@bpv_dte";
}
cmd.Parameters.Add(new OleDbParameter("@bpv_num", bpvnum));
cmd.Parameters.Add(new OleDbParameter("@bpv_dte", Convert.ToDateTime(RadComboBox1.SelectedValue)));
cmd.ExecuteNonQuery();
}
}
}
答案 2 :(得分:0)
使用“快速”窗口检查“row.Cells [1] .Text”的返回值是什么。
答案 3 :(得分:0)
代码中的问题是因为从“string”到“OleDbType.Date”的类型转换错误。所以替换以下代码
cmd.Parameters.Add(":bpv_dte",OleDbType.Date).Value = RadComboBox1.SelectedValue;
使用以下代码
cmd.Parameters.Add(New OleDb.OleDbParameter("@bpv_dte", OleDb.OleDbType.Date));
cmd.Parameters("@bpv_dte").Value = RadComboBox1.SelectedValue.ToString("d");
如果有更多行用于插入,请确保将所有类型正确转换为OleDbType。