1
dataGridView1.DataSource = null;

using (SqlConnection myDatabaseConnection = new SqlConnection(myConnectionString.ConnectionString))
{
    myDatabaseConnection.Open();
    using (SqlCommand mySqlCommand = new SqlCommand("Select Name, Picture from Employee ", myDatabaseConnection))
    {
        DataSet ds = new DataSet();
        SqlDataAdapter adapter = new SqlDataAdapter(mySqlCommand);
        adapter.Fill(ds);
        dataGridView1.DataSource = ds.Tables[0];  
    }
}

而不是使用datagridview,我如何在面板中显示带有名称的图片或数据库中的其他控件,例如这种格式http://static.neatorama.com/images/2008-04/yearbook-project-robot-johnny .gif赢形式?例如我在数据库中有 7 条记录,表单将显示 7 个带有图片和标签的面板。当我单击或选择一个面板时,它将在文本框中显示更多信息,例如地址、联系人等。如果数据库中的记录太多而无法放入表单中,则会出现垂直或水平滚动条。

4

2 回答 2

3

我建议您动态创建所需的对象。您可以使用“位置”来定位您的对象。

例子 :

int cptx = 0;
int cpty = 0;

for(int i=0; i<ds.Tables[0].Rows.Count;i++)
{
    PictureBox currentpic = new PictureBox();
    Label currentlabel = new Label();

    currentpic.Size = new Size(20,20);
    currentlabel.Size = new Size(20,20);

    currentpic.BorderStyle = BorderStyle.FixedSingle;
    currentlabel.Text = "te";

    if(cptx >= 4)
    {
        cptx = 0;
        cpty ++;
    }

    currentpic.Location= new Point((cptx*25),(cpty*50));
    currentlabel.Location = new Point((cptx*25),(cpty*50)+25);

    This.Controls.Add(currentpic);

    cptx ++;

}

这段代码应该这样做:

在此处输入图像描述

编辑:我建议你看看“用户控件”,用户控件允许你创建你自己的控件。因此,图片和标签将位于单个控件中。使用用户控件的优点是您将创建的控件将完全可重用于您的其他窗口和/或程序。

于 2013-05-28T00:36:02.757 回答
0

表单只有一个面板(pnlGrid)并且面板的AutoScroll属性设置为 true;

DataTable dtImage = new DataTable();

dtImage.Columns.Add("Path");
dtImage.Columns.Add("Name");

dtImage.Rows.Add(new object[] { "ImagePath", "ImageText" });
dtImage.Rows.Add(new object[] { "ImagePath", "ImageText" });
dtImage.Rows.Add(new object[] { "ImagePath", "ImageText" });

CreateImageGrid(dtImage);

和方法;

private void CreateImageGrid(DataTable dtDataSource)
{
    int colCount = 5;
    int rowCount = 0;
    int imgWidth = 100;
    int imgHeight = 100;
    int imgPadding = 10;
    int lblPadding = 5;
    int ind = -1;

    PictureBox pic = null;
    Label lbl = null;

    if (dtDataSource.Rows.Count > colCount)
    {
        rowCount = Convert.ToInt32(dtDataSource.Rows.Count / colCount);

        if (Convert.ToInt32(dtDataSource.Rows.Count % colCount) > 0)
        {
            rowCount++;
        }
    }
    else
    {
        rowCount = 1;
    }

    for (int j = 0; j < rowCount; j++)
    {
        for (int i = 0; i < colCount && dtDataSource.Rows.Count > ((j * colCount) + i); i++)
        {
            ind = (j * colCount) + i;

            pic = new PictureBox();
            pic.Image = Image.FromFile(dtDataSource.Rows[ind]["Path"].ToString());

            pnlGrid.Controls.Add(pic);

            pic.Width = imgWidth;
            pic.Height = imgHeight;
            pic.Top = (j * (imgHeight + imgPadding)) + imgPadding;
            pic.Left = (i * (imgWidth + imgPadding)) + imgPadding;

            lbl = new Label();
            lbl.Text = dtDataSource.Rows[ind]["Name"].ToString();

            pnlGrid.Controls.Add(lbl);

            lbl.Left = pic.Left;
            lbl.Top = pic.Top + pic.Height + lblPadding;
        }
    }
}

注意:文本长度可能会导致问题,您应该定义一些规则。

于 2013-05-28T10:39:41.427 回答