3

後でデータベースに保存される多くの「create new [xxx]」フォーム(テキストボックス、コンボボックス、datetime picekrsなどを含む)を含むプログラムがあります。そのデータを表示するには、データベースから入力された datagridview を持つ対応するフォーム "view [xxx]" を使用します。

ユーザーが datagridview のフィールドをクリックすると、データは元の「作成」フォームに送り返されます。

これまで、datagridview から行全体のデータを渡すことで、「作成」フォームのコンストラクターをオーバーロードすることでそれを行ってきました。

例:

フォームを見る:

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        if (e.RowIndex > -1)
        {
            ID = dataGridView1.Rows[e.RowIndex].Cells[0].FormattedValue.ToString();
            string posName = dataGridView1.Rows[e.RowIndex].Cells[1].FormattedValue.ToString();
            string posDesc = dataGridView1.Rows[e.RowIndex].Cells[2].FormattedValue.ToString();

            frmNewStaffPosition frm = new frmNewStaffPosition(posName, posDesc);

            frm.Show();
frm.NewTypePositionAdded += new frmNewStaffPosition.AddNewTypeOfStaffPosition(frm_NewTypePositionAdded);

フォームを作成:

   public frmNewStaffPosition( string pos, string desc)
    {
        InitializeComponent();
        tbPositionName.Text = pos;
        tbNewStaffPositionDecription.Text = desc;



    }

これは機能しますが、特に VIEW から渡されたデータに多くの列が含まれている場合は、最善の解決策ではないと思います。選択した行の PK のみを渡し、データベースから直接 CREATE フォームに入力するなど、より洗練されたソリューションはありますか?

それが問題であれば、MySQL コネクタを介して MySQL データベースを使用します。

4

3 に答える 3

0

担当する内容によります。キーを渡すのも 1 つの方法ですが、フォームにデータベース コードを追加する必要があります。それは賢明なカップリングであることが判明し、FormattedValue を使用しているため、それを再実装する必要があります。

クラスをノックアップしてデータを入れて渡し、すべてのやり取りをクラスに委譲するか、さらにはそれが実装するインターフェイスに委譲することができます。

または、そのままにしておくこともできます。これらはすべて、現在の厄介なビットを移動/非表示にしているためです。

いくつかのフォームが共通のデータ グループを使用していることが判明した場合は、検討する価値があるかもしれません。

とは言っても、グリッドの基礎となるデータソース、つまりデータ行から渡す方がはるかに快適です。それ以外の場合は、フォームがデータを文字列としてのみ処理する場合を除き、変換/解析する文字列以外の値については.

于 2012-05-09T01:07:44.183 に答える
0

通常、私はこれらの基本的なルールに従います...

1) 特定のレコード データを検索/編集する場合は、キー データのみをコンストラクターに次のフォームに渡します。

2)デフォルト値で新しいデータを作成している場合は、それらをクラスに入れます。

于 2012-05-09T01:40:35.130 に答える
0

列が数百未満の場合、列が数 MB のデータを含む BLOB でない限り、これはプログラムのパフォーマンスの障害にはならないと思います。数百 (または数千) 行を渡す場合、それはまったく別の問題になりますが、200 程度の列がコンピューターに大量のデータを渡す場合でも、コンピューターで何度も何度も行うことができます。あなたが気づくことができない時間の空間。

時期尚早に最適化しないでください。あなたのプログラムはその仕事をするのに遅く実行されていますか? いいえの場合は、まったく気にしないでください。そうである場合は、プロファイラーを使用して、必要以上に時間がかかっているものを確認し、そこで最適化を探します。

ああ、1 つまたは 2 つ以上の列がある場合は、各列のフィールドを持つクラスを作成し、そのクラスのインスタンスを設定してから渡すのがおそらく最善です。たくさんのパラメーターを扱うよりもはるかに簡単です。

于 2012-05-09T00:50:06.807 に答える