0

同じページにチャート コントロールとデータグリッドがあります。

ボタンを1回クリックして、データリーダーを使用して両方にデータを入力したい。

私はこのコードを持っています:

dg.datasource=reader
dg.databind()

Chart1.Series("series1").Points.DataBind(
    reader, 
    "product_name", 
    "SumOfpriceafterall", 
    "Tooltip=SumOfpriceafterall, Label=quantity{C2}")

問題は、そのうちの 1 つ (コード内の最初のデータバインド) のみが読み込まれ、他のデータバインドが機能していないことです。

なぜこれが起こるのですか?

4

2 に答える 2

1

datareader は転送専用のデータソースであるためです。グリッドにデータが入力されると、カーソルが最後に到達し、datareader が終了します。したがって、2 番目のバインド (chart.bind) の間、datareader にはデータが含まれていません。代わりに、前後に移動できるデータセットを使用するか、最初のデータバインド後に同じデータリーダーを再取得する必要があります。

于 2012-04-10T05:09:41.800 に答える
0

以前の回答に加えて、データセットの使用や同じデータリーダーの再取得を避けたい場合は、次のトリックを実行できます。

コード ビハインドでは、gridview.rowdatabound イベントを使用し、グリッドビューに追加された各データ行に対して、同じデータを使用してグラフに X、Y をプロットします。何かのようなもの:

Protected Sub myGV_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles myGV.RowDataBound

    Dim Field1 as string, Field2 as string

    If e.Row.RowType = DataControlRowType.DataRow Then
        Field1 = DataBinder.Eval(e.Row.DataItem, "Field1")  ' X Value
        Field2 = DataBinder.Eval(e.Row.DataItem, "Field2")  ' Y value
        ' Plot on the chart the above X,Y
    End If
End Sub
于 2012-04-10T16:12:35.450 に答える