【データ連結】【VS2005】DataSource コントロールと連結した場合、非連結列のセルをクライアント側から更新することができない

文書番号 : 26728     文書種別 : 不具合     最終更新日 : 2009/02/18
文書を印刷する
対象製品
SPREAD for .NET 2.5J Web Forms Edition
発生環境
この現象は、Visual Studio 2005を使用した開発環境で発生します
状況
修正済み
詳細
SPREADがDataSource コントロールと連結した場合、SPREADのデータモデルの更新を行うと、クライアント側で変更した非連結列のセルの値がクリアされます。

【手順】
1.新規WebフォームにSPREADとbutton、SqlDataSourceコントロールを配置します
2.下記サンプルコードをコピーし、アプリケーションを実行します
3.B1セルに「aaa」と入力し、buttonをクリックします
4.B1セルの値がクリアされます

【サンプルコード】
-------------------------
Webフォームクラス
-------------------------
  Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
    ' 特定フィールドのみを連結します
    FpSpread1.ActiveSheetView.AutoGenerateColumns = False
    FpSpread1.ActiveSheetView.DataSourceID = "SqlDataSource1"
    FpSpread1.ActiveSheetView.Columns(0).DataField = "No"
    FpSpread1.ActiveSheetView.Columns(2).DataField = "Item1"
  End Sub

  Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    FpSpread1.SaveChanges()
  End Sub
回避方法
2009/05/27版で修正済み。

2009/05/27版より前のバージョンでは次の回避方法が有効です。

DataSource コントロールではなく、DataSetと連結します。

【サンプルコード】
-------------------------
Webフォームクラス
-------------------------
  Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
    ' 特定フィールドのみを連結します
    FpSpread1.ActiveSheetView.AutoGenerateColumns = False

    Dim cn As New System.Data.SqlClient.SqlConnection()
    Dim da As New System.Data.SqlClient.SqlDataAdapter()
    Dim ds As New Data.DataSet()

    cn.ConnectionString = "Data Source=.¥SQLEXPRESS;AttachDbFilename=|DataDirectory|¥Database.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
    cn.Open()

    Dim dbCmd As New System.Data.SqlClient.SqlCommand("select * from Table1", cn)
    da.SelectCommand = dbCmd

    da.Fill(ds)

    ' SPREADにデータを連結
    FpSpread1.ActiveSheetView.DataSource = ds
    FpSpread1.ActiveSheetView.Columns(0).DataField = "No"
    FpSpread1.ActiveSheetView.Columns(2).DataField = "Item1"

    cn.Close()
  End Sub

  Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    FpSpread1.SaveChanges()

    ' SPREADのデータソースを取得し、データベースを更新
    Dim cn As New System.Data.SqlClient.SqlConnection()
    Dim da As New System.Data.SqlClient.SqlDataAdapter()

    cn.ConnectionString = "Data Source=.¥SQLEXPRESS;AttachDbFilename=|DataDirectory|¥Database.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
    cn.Open()

    Dim dbCmd As New System.Data.SqlClient.SqlCommand("UPDATE Table1 SET Check1 = @Check1, Item1 = @Item1 WHERE No = @No", cn)
    dbCmd.Parameters.Add(New System.Data.SqlClient.SqlParameter("No", Data.SqlDbType.Int, 4, "No"))
    dbCmd.Parameters.Add(New System.Data.SqlClient.SqlParameter("Check1", Data.SqlDbType.Bit, 1, "Check1"))
    dbCmd.Parameters.Add(New System.Data.SqlClient.SqlParameter("Item1", Data.SqlDbType.NChar, 20, "Item1"))

    da.UpdateCommand = dbCmd

    Dim ds As Data.DataSet = DirectCast(FpSpread1.ActiveSheetView.DataSource, Data.DataSet)
    da.Update(ds)
    ds.AcceptChanges()

    cn.Close()
  End Sub
キーワード
SPRN07164

この文書は、以前は次のバグレポートIDで公開されていました : 7861