如何在动态datagridview中创建静态和动态按钮

时间:2015-08-14 09:27:10

标签: c# winforms datagridview

您好我的datagridview输入错误了。 (见下图)

enter image description here

我希望它完全像下面的图片

enter image description here

所以这是我的数据库,你可以在下面看到

enter image description here

这是我的代码。所以我的代码生成按钮,如果我点击它。它应该在datagridview中生成适当的值。

object[] itemDetail;
object[] itemLi = itemsWS.searchItem("", "drinks", "all");
int x = 35;
int cleft = 0;

for (int i = 0; i < itemLi.Length; i++)
{
    itemDetail = itemsWS.getItemInfo(itemLi[i].ToString());
    Button myButton = new Button();
    myButton.Tag = i;
    myButton.Click += (senders, args) =>
    {
        var button = senders as Button;
        selectedItenOutputOrderTabGrid.ColumnCount = 4;
        selectedItenOutputOrderTabGrid.Columns[0].Name = "Item Code";
        //selectedItenOutputOrderTabGrid.Columns[1].Name = "description SCRAP";
        selectedItenOutputOrderTabGrid.Columns[1].Name = "Each";
        selectedItenOutputOrderTabGrid.Columns[2].Name = "Quantity";
        selectedItenOutputOrderTabGrid.Columns[3].Name = "Amount";

        //this.selectedItenOutputOrderTabGrid.Columns[1].Visible = false;

        string row1 = itemsWS.getItemInfo(itemLi[(int)button.Tag].ToString()).ToString();

        numericPopUp numPopUp = new numericPopUp();
        numPopUp.Show();
        selectedItenOutputOrderTabGrid.Rows.Add(itemsWS.getItemInfo(itemLi[(int)button.Tag].ToString()));
    };

    myButton.Text = itemDetail[1].ToString() + "\n  " + itemDetail[2].ToString();
    myButton.Top = cleft * 180;
    myButton.Left = 70;
    myButton.Location = new Point(x, cleft);
    myButton.Size = new Size(100, 60);
    drinksOrderManagementTab.Controls.Add(myButton);
    x += 135;

    if (x >= 537)
    {
        x = 35;
        cleft += 80;
    }
}

请任何帮助将不胜感激。非常感谢你

1 个答案:

答案 0 :(得分:0)

基本上你的行正在做你告诉它要做的事:它显示给定的项目。您的问题是,这些项目直接来自数据库并包含每一列 - 没有限制或重新排序。这就是为什么你看到行中反映的列顺序(第一个item_code,然后是描述等)。

这里最简单的方法是构建一个新数组,其中只包含您想要在行中显示的数据。像(伪代码):

object[] dbOutput = itemsWS.getItemInfo(itemLi[(int)button.Tag].ToString());
object[] items = new object[] {
    dbOutput[1], //description
    dbOutput[2]  //sale_price
    //and so on
};
selectedItenOutputOrderTabGrid.Rows.Add(items);

我非常确定有先进的技术,我个人会在您从数据库中选择数据时将其解决,但这可以解决您的问题。