0

有効な XHTML. ブラックボックスはユーザーコントロールです。

ユーザー制御コード

 string b = "";
    public string ID
    {
        set { b = value; }
    }

    public void sample()
    {
        textBox1.Clear();
        using (SqlConnection myDatabaseConnection = new SqlConnection(myConnectionString.ConnectionString))
        {
            myDatabaseConnection.Open();
            using (SqlCommand SqlCommand = new SqlCommand("Select LastName, Image from Employee where ID = @a", myDatabaseConnection))
            {
                SqlCommand.Parameters.AddWithValue("@a", b);
                DataSet DS = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter(SqlCommand);
                da.Fill(DS, "Images");
                var imagesTable = DS.Tables["Images"];
                var imagesRows = imagesTable.Rows;
                var count = imagesRows.Count;

                if (count <= 0)
                    return;
                var imageColumnValue =
                    imagesRows[count - 1]["Image"];
                if (imageColumnValue == DBNull.Value)
                    return;

                var data = (Byte[])imageColumnValue;
                using (var stream = new MemoryStream(data))
                {
                    pictureBox1.Image = Image.FromStream(stream);
                }

            }
        }   
    }

    public void getname()
    {
        using (SqlConnection myDatabaseConnection = new SqlConnection(myConnectionString.ConnectionString))
        {
            myDatabaseConnection.Open();
            using (SqlCommand SqlCommand = new SqlCommand("Select LastName from Employee where ID =  @a", myDatabaseConnection))
            using (SqlDataAdapter da = new SqlDataAdapter(SqlCommand))
            {
                SqlCommand.Parameters.AddWithValue("@a", b);

                SqlDataReader DR1 = SqlCommand.ExecuteReader();
                if (DR1.Read())
                {
                    textBox1.Text = DR1.GetString(DR1.GetOrdinal("LastName")).ToString();
                }
            }
        }
    }

フォームコード

public string ID
    {
        get { return textBox1.Text; }
    }

        private void textBox1_TextChanged(object sender, EventArgs e)
    {
        userControl21.ID = ID;
        userControl21.sample();
        userControl21.getname();
    }

上記のコードを使用して、単一のレコードをユーザー コントロールに表示できます。データベース内のレコード数に基づいて、写真と名前を含むユーザーコントロールの数を表示するにはどうすればよいですか? たとえば、データベースに 7 つのレコードがあり、フォームには 7 つのユーザー コントロールが表示されます。また、ユーザーコントロールをクリックまたは選択すると、住所、連絡先などの詳細情報がフォームに表示されます。データベース内のレコードが多すぎてフォームに収まらない場合は、垂直または水平のスクロール バーが表示されます。コードを教えてください:)

スクロールバーを持つことができるユーザーコントロールを表示するのに最適なコンテナは何ですか? パネル、グループボックスか何か?

これはサンプル出力である必要があります。 有効な XHTML.

4

2 に答える 2

0

あなたが説明しているものと非常によく似たビューを作成しました。Containerから継承され、カスタム描画されたクラスがFormあります (実際には、abstract共通の機能をすべて共有する多くの種類のコンテナーを作成するために、さらに継承するクラスです)。Containersこれらを動的にコントロールに追加します。Panelこれは、データベース内のレコードをループして、オブジェクトの作成方法に関する情報を取得することに基づいていますContainers。独自のクラスであることは、ユーザーの選択に反応する (住所や連絡先などの詳細情報を取得する) など、選択したイベントのカスタム ハンドラーを持つことができることを意味します。

あなたの例では、「UserControl」と呼ばれるもののクラスが表示されません。そこから始めることをお勧めします。「コンテナ」オブジェクトを定義する具体的なクラスは、このプロジェクトを固定するものです。

Panel最後のスクリーンショットでは、赤いアウトラインがコントロール になっているはずです。Panelスクロールを許可します。FlowLayoutControlまたは、コンテナーを所有するコントロールで配置と間隔を制御したい場合は、 を使用することもできます。Panel絶対位置の制御を維持するために を使用しました。

コンテナー クラスと を含むフォームをPanel作成したら、データベースから取得したレコードをループして、それぞれにコンテナー オブジェクトを追加し、その値を同時に設定できます (例に基づいて、いくつかのテキストと画像)。

于 2013-06-03T11:05:53.990 に答える