C# 将datagridview导出为csv DataTable myTable=新的DataTable(“组件”); 数据列mydatcolumn; mydatcolumn=新数据列(); mydatcolumn.DataType=System.Type.GetType(“System.String”); mydatcolumn.ColumnName=“组件”; myTable.Columns.Add(mydatcolumn); mydatcolumn=新数据列(); mydatcolumn.DataType=System.Type.GetType(“System.String”); mydatcolumn.ColumnName=“服务类别”; myTable.Columns.Add(mydatcolumn); mydatcolumn=新数据列(); mydatcolumn.DataType=System.Type.GetType(“System.String”); mydatcolumn.ColumnName=“组件所有者”; myTable.Columns.Add(mydatcolumn); for(int i=0;i
如上所述,我正在创建一个包含三列的DataTable,并使用此DataTable在datagridview上显示2列表(上面未显示)中的项。列表仅为2列填充行,第三列用于用户输入。在那个按钮点击事件中,我只想在一个文件中写入那个些用户正在输入的行,而忽略其余的行。我怎样才能做到这一点。C# 将datagridview导出为csv DataTable myTable=新的DataTable(“组件”); 数据列mydatcolumn; mydatcolumn=新数据列(); mydatcolumn.DataType=System.Type.GetType(“System.String”); mydatcolumn.ColumnName=“组件”; myTable.Columns.Add(mydatcolumn); mydatcolumn=新数据列(); mydatcolumn.DataType=System.Type.GetType(“System.String”); mydatcolumn.ColumnName=“服务类别”; myTable.Columns.Add(mydatcolumn); mydatcolumn=新数据列(); mydatcolumn.DataType=System.Type.GetType(“System.String”); mydatcolumn.ColumnName=“组件所有者”; myTable.Columns.Add(mydatcolumn); for(int i=0;i,c#,datagridview,C#,Datagridview,如上所述,我正在创建一个包含三列的DataTable,并使用此DataTable在datagridview上显示2列表(上面未显示)中的项。列表仅为2列填充行,第三列用于用户输入。在那个按钮点击事件中,我只想在一个文件中写入那个些用户正在输入的行,而忽略其余的行。我怎样才能做到这一点。 非常感谢使用componentRGOdataGridView.Rows获取componentRGOdataGridView中的所有数据。 然后使用DataGridViewRow类的属性获取单元格的值。 在此之后,
非常感谢使用componentRGOdataGridView.Rows获取componentRGOdataGridView中的所有数据。
然后使用DataGridViewRow类的属性获取单元格的值。
在此之后,您可以使用您喜爱的csv编写器制作csv文件 您可以尝试使用此代码将单元格的值打印到输出窗口
DataTable myTable = new DataTable("components");
DataColumn mydatcolumn;
mydatcolumn = new DataColumn();
mydatcolumn.DataType = System.Type.GetType("System.String");
mydatcolumn.ColumnName = "Component";
myTable.Columns.Add(mydatcolumn);
mydatcolumn = new DataColumn();
mydatcolumn.DataType = System.Type.GetType("System.String");
mydatcolumn.ColumnName = "Service Category";
myTable.Columns.Add(mydatcolumn);
mydatcolumn = new DataColumn();
mydatcolumn.DataType = System.Type.GetType("System.String");
mydatcolumn.ColumnName = "Component Owner";
myTable.Columns.Add(mydatcolumn);
for (int i = 0; i < serviceList.Count; i++)
{
DataRow mydatarow;
//DataRow mydatarow2;
mydatarow = myTable.NewRow();
mydatarow["component"] = ComponentList[i];
//mydatarow2 = myTable.NewRow();
mydatarow["Service Category"] = sc[i];
myTable.Rows.Add(mydatarow);
}
componentRGOdataGridView.DataSource = myTable;
private void addCoButton_Click(object sender, EventArgs e)
{
}
DataGridView控件提供了
DataGridView.GetClipboardContent()
方法,该方法将选定单元格格式化为可放入Windows剪贴板的DataObject
。然后,您可以以TextDataFormat.CommaSeparatedValue
的形式检索剪贴板的内容。这将以CSV格式的字符串形式返回剪贴板的内容,该字符串可以写入文件。通过使用DataGridView提供的方法SelectAll()
,您可以选择整个DataGridView复制到剪贴板中。您甚至可以通过将DataGridView.ClipboardCopyMode
指定为等于enumDataGridViewClipboardCopyMode.enableAllwaysIncludeHeaderText
来复制标题行
见证以下代码的简单性:
foreach (DataGridViewRow item in componentRGOdataGridView.Rows)
{
Debug.Write(item.Cells[0].Value.ToString());
Debug.Write(item.Cells[1].Value.ToString());
Debug.WriteLine(item.Cells[2].Value.ToString());
}
请注意,在复制DataGridView之前,我还采取了保存剪贴板内容的预防措施,以便在复制完成后恢复它
我相信这种方法是优越的,因为您使用的是已经提供给您的框架,而不是通过行和单元格循环来重新发明轮子,这很容易出错
希望这能解决你的问题…那么你的问题到底是什么?从
OnClick
事件获取当前行?是否将事件附加到按钮?或者从给定的数据行
创建CSV文件?获取datagridview的行并将其保存在.CSV文件中是一个问题。
void SaveDataGridViewToCSV(string filename)
{
// Save the current state of the clipboard so we can restore it after we are done
IDataObject objectSave = Clipboard.GetDataObject();
// Choose whether to write header. Use EnableWithoutHeaderText instead to omit header.
dataGridView1.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText;
// Select all the cells
dataGridView1.SelectAll();
// Copy (set clipboard)
Clipboard.SetDataObject(dataGridView1.GetClipboardContent());
// Paste (get the clipboard and serialize it to a file)
File.WriteAllText(filename,Clipboard.GetText(TextDataFormat.CommaSeparatedValue));
// Restore the current state of the clipboard so the effect is seamless
if(objectSave != null) // If we try to set the Clipboard to an object that is null, it will throw...
{
Clipboard.SetDataObject(objectSave);
}
}