3

以下のコードを使用して、アプリケーションの datagridview を Timmer で更新します。タイマーは毎秒実行され、画面が点滅し続けます。その時に点滅しないようにするにはどうすればよいですか?またはデータグリッドビューを更新する別の方法はありますか?

        SqlConnection mySqlConnection = new SqlConnection(SQLCONN);
        mySqlConnection.Open();

        SqlDataAdapter addapter = new SqlDataAdapter();
        DataTable dt = new DataTable("SSReportAmalgamate");
        SqlCommand cmd = mySqlConnection.CreateCommand();

        cmd.CommandText = "EXEC App_GetDATA " + "@acc" + "," + "@selecttype";
        cmd.Parameters.Add("@acc", SqlDbType.Char).Value = acc;
        cmd.Parameters.Add("@selecttype", SqlDbType.Char).Value = type;
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandType = CommandType.Text;
        cmd.Connection = mySqlConnection;
        addapter.SelectCommand = cmd;

        addapter.Fill(dt);
        dataGridView1.DataSource = dt;

        mySqlConnection.Close();
4

3 に答える 3

1

問題は、データが変更されていなくてもフォームを更新することです。代わりに、新しいデータがある場合 (もちろん、データが頻繁に変更されない場合) にSqlDependency を使用するなど、SQL Server からのイベントを聞くようにしてください。

于 2013-04-02T09:15:31.220 に答える
0

拡張メソッドを使用してデータグリッドのダブル バッファリングを追加し、後でフォームで true に設定します。

public static class ExtensionMethods
{
    public static void DoubleBuffered(this DataGridView dgv, bool setting)
    {
        Type dgvType = dgv.GetType();
        PropertyInfo pi = dgvType.GetProperty("DoubleBuffered",
            BindingFlags.Instance | BindingFlags.NonPublic);
        pi.SetValue(dgv, setting, null);
    }
}

上記のクラスをプロジェクトに追加し、次のように、データグリッドのダブル バッファー プロパティを設定します。

dataGridView1.DoubleBuffered(true);

参照: http://bitmatic.com/c/fixing-a-slow-scrolling-datagridview

于 2013-04-02T10:18:38.437 に答える