【问题标题】:Filter what datagrid elements to add to stringbuilder过滤要添加到 stringbuilder 的数据网格元素
【发布时间】:2013-08-13 10:08:00
【问题描述】:

我的应用程序有一个导出按钮,它打开一个保存文件对话框和一个下拉框,允许用户选择客户端和将文件保存到的路径,单击导出按钮后,我想从数据中获取数据网格,其中客户端名称与下拉列表中找到的匹配并将这些发送到文件,目前我的代码如下但是它只返回列的标题,有人知道解决方案吗? :

      foreach (DataRow dr in this.CalcDataSet.MInve)
        {

            bool hasValue = false;

            for (int i = 0; i < dr.ItemArray.Count(); i++)
            {
                //if doesnt match selected client
                if    (!dr[i].ToString().Contains(dropboxClientList.SelectedValue.ToString()))
                hasValue = true;
            }

            //else 
            if (!hasValue) rowsToADD.Add(dr);

            foreach (DataRow field in rowsToADD)
            {   
              str.Append(field.ToString() + ",");
            }
            str.Replace(",", "\n", str.Length - 1, 1);
        }


        try
        {
            System.IO.File.WriteAllText(Filepath, str.ToString());
        }
        catch (Exception ex)
        {
            MessageBox.Show("Write Error :" + ex.Message);
        }

【问题讨论】:

  • 什么是 CalcDataSet.MInve?
  • 它是一个数据源,或者一个数据集可能更清晰,Minve 是主库存清单,我认为它们与它没有任何关系,因为我可以轻松地从中获取所有数据主库存表并将其添加到数据网格然后文件,当我尝试仅添加选定的行时出现问题

标签: c# csv file-io datagrid


【解决方案1】:

取自this SO post

string file_name = "C:\\test1.txt";

System.IO.StreamWriter objWriter;

objWriter = new System.IO.StreamWriter(file_name);

int count = dgv.Rows.Count;

for (int row = 0; row < count; row++)
{
    int colCount = dgv.Rows[row].Cells.Count;

    // EDIT inserted if statement
    string selectedValue = dropboxClientList.SelectedValue.ToString();
    string clientName = dgv.Rows[row].Cells[1].Value.ToString();

    // If the current row contains the selected client name 
    if (clientName.Contains(selectedValue)
    {
        // Write the columns for the current row
        for ( int col = 0; col < colCount; col++)  
        {            
            objWriter.WriteLine(dgv.Rows[row].Cells[col].Value.ToString());
        }
    }

    // record seperator could be written here.
}

objWriter.Close();

【讨论】:

  • 对此感到抱歉,有一个金发碧眼的时刻,但我无法弄清楚该代码将如何与问题相关?我有一个下拉框,当点击导出按钮时,我需要引用该框,并且只写入客户端名称等于所选行的数据网格行
  • '// EDIT 插入的 if 语句' 新代码对你有用吗?相应地更改单元格引用 (clientName)。
  • 顺便说一下,'dgv' 与 DataGridView 名称相关,而不是数据集、数据行或其他任何东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-18
  • 1970-01-01
  • 2013-12-27
  • 1970-01-01
相关资源
最近更新 更多