【问题标题】:loop a column in datagridview to get the value?在datagridview中循环一列以获取值?
【发布时间】:2011-06-27 06:52:10
【问题描述】:

我正在做一个关于 Web 服务和窗口窗体的项目 基本上我遇到了一些问题,不知道如何解决

  1. 我想通过 Web 服务获取 datagridview 的 ColA 中每一行中的数据并进入数据库,以获得类似 row1;row2;row3;row4 的内容......所以我做了一个 for 循环但在我用粗体突出显示的名义下划线

    private void push_Click(object sender, EventArgs e)
    
    {
    
        string nominal;
    
        for (int i = 0; i < DGV.Rows.Count; i++)
        {
            nominal = Convert.ToString(DGV.Rows[i].Cells[1].Value);
    
        }
        WSBrand insertInto = new WSBrand();
        insertInto.Insert(**nominal**)
    }
    

这是我的插入方法

[WebMethod]

public DataSet Insert(String BrandName)
{

    SqlCommand dbCommand = new SqlCommand();
    dbCommand.CommandText = "INSERT INTO Brand (BrandName)VALUES (@BrandName)";
    dbCommand.Connection = conn;
    da = new SqlDataAdapter();
    da.SelectCommand = dbCommand;
    dbCommand.Parameters.AddWithValue("@BrandName", BrandName);


    DataSet ds = new DataSet();
    da.Fill(ds);
    return ds;
}

【问题讨论】:

  • @cutexxxbabies - 请妥善安排您的问题,以便我们回答。
  • 我希望将每一行中datagridview中ColumnA的数据插入到数据库中......以获得row1;row2;row3的结果......
  • 获取插入,字符串将具有循环中的最后一个值
  • @V4Vendetta,我尝试将插入内容放入其中,但打印出来的时间很长..bt 是它自己的每一行,而不是一起
  • @cutexxxbabies 用FormattedValue代替Value怎么样

标签: c# winforms visual-studio web-services datagridview


【解决方案1】:
private void push_Click(object sender, EventArgs e)
{    
    StringBuilder nominal = new StringBuilder();
    for(int i = 0;i<DGV.Rows.Count;i++){
        nominal.Append(Convert.ToString(DGV.Rows[i].Cells[1].Value) + ";");
    }
    WSBrand insertInto = new WSBrand();
    InsertInto.Insert(nominalList); 
}

在您的 WSBrand 类中:

    [WebMethod]
public DataSet Insert(string nominal)
{        
    SqlCommand dbCommand = new SqlCommand();
    dbCommand.CommandText = "INSERT INTO Brand (BrandName)VALUES (@BrandName)";
    dbCommand.Connection = conn;
    dbCommand.Parameters.AddWithValue("@BrandName", sb.ToString());
    dbCommand.ExecuteNonQuery();

    SqlCommand dbCommand2 = new SqlCommand();
    dbCommand2.CommandText = "SELECT * FROM Brand";
    dbCommand2.Connection = conn;
    SqlDataAdapter da = new SqlDataAdapter();
    da.SelectCommand = dbCommand2;
    dbCommand2.ExecuteNonQuery();

    DataSet ds = new DataSet();
    da.Fill(ds);
    return ds;
}

问题是在 for 循环的每次迭代中都会覆盖名义上的。如果您创建一个包含 DGV 的所有值的字符串列表,那么在您的 WSBrand 类中访问它们会更容易。

编辑:当您执行 INSERT 语句时,唯一会返回的是受影响的行数。要取回所有数据,您必须执行 SELECT * FROM Brands 查询,这将使您能够用数据填充数据集!

最终编辑:这应该很有希望。我已经更改了 push_Click 方法和 Insert 方法。如果有任何语法错误,您必须像我在记事本中那样解决这些错误。祝你好运

【讨论】:

  • 数据库不显示数据,它显示这个“System.Collections.Generic.List`1[System.String]”
  • 您的插入方法期望什么?您应该将方法签名更改为 Insert(List nomList) 以及在您需要遍历列表以获取每个值之前名义上的位置。我不确定您将在插入插入后如何处理名义上的内容。
  • 所以基本上这个插入是一个网络方法,我使用这个网络方法并插入到另一个数据库表中,所以如果 ColA 第 1 行数据是 D,第 2 行数据是 E,那么第 3 行数据是 F。 ..我想在数据库列 ..D;E;F 的数据库中得到这个
  • @cutexxxbabies 因此,您希望字符串 BrandName 的字面意思是“D;E;F”,是否要将 D、E 和 F 分别插入到 Brand 表中。如果是这样,请使用我的编辑。
  • @stuartmclark 我想把它放在一个记录中......加上插入是一种网络方法,为什么你把它写成类......因为我通常使用数据集
【解决方案2】:

只需使用 foreach 循环:

foreach(DataGridviewRow a in DGV.Rows)
{
 string  nominal = Convert.ToString(a.Cells[1].Value)

    WSBrand insertInto = new WSBrand();
    insertInto.Insert(nominal)

}

【讨论】:

  • 但是当我使用`WSBrand insertInto = new WSBrand(); insertInto.Insert(nominal)` 标称是下划线
  • 尝试这种方式...打印出很多时间,但我想将第 1 行 D 第 2 行 E 第 3 F 行插入到另一个数据库 D;E;F
猜你喜欢
  • 2016-08-05
  • 2017-03-25
  • 1970-01-01
  • 1970-01-01
  • 2021-06-23
  • 2018-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多