【データ連結】【VS2005】DataSource コントロールと連結した場合、非連結列のセルをクライアント側から更新することができない
対象製品
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
【手順】
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
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