1

項目テンプレートとしてチェック ボックスがある 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(); 

    }

問題は、チェック ボックスを変更すると、次のエラーが表示されることです。

入力文字列は、正しい形式ではありませんでした。

何が問題なのか、どうすれば解決できるのか誰にもわかりますか?

4

4 に答える 4

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

または、ComboBox の代わりにDateTimePickerを使用する必要があります

于 2012-12-22T11:09:48.337 に答える
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();
            }
        }
    }
于 2012-12-22T11:14:33.463 に答える
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 に正しく変換してください。

于 2012-12-24T10:57:57.553 に答える