Как я могу перенести строки gridview в таблицу данных и остановить переполнение содержимого таблицы данных методом мутатора?
Я пытаюсь извлечь строковый текст из представления таблицы данных и сохранить его в таблице данных, чтобы сохранить таблицу данных в csv-файл. У меня есть 2 несвязанных столбца, которые я смог прочитать в csv-файле. Один из них-описание. Другой-это данные. Проблема в том, что когда я отлаживаю, я замечаю, что datatable остается нулевым независимо от того, что я делаю. Я все перепробовал.
Кто-нибудь знает, как я могу это исправить? У меня есть метод мутатора под названием ProcessSettingFileCMD, и я понимаю, что перегружаю им таблицу данных, поэтому он никогда не получит фактические строки представления сетки или нулевые данные. Ты хочешь посмотреть
mmuSaveAs_Clickи
Моя форма настроек, содержащая представление таблицы данных.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; public partial class frmSettings : Form { #region Declarations protected string FileName; protected bool Modified; Setting _objSetting = new Setting(); OpenFileDialog openFD = new OpenFileDialog(); SaveFileDialog saveFD = new SaveFileDialog(); DataTable _dt = new DataTable(); #endregion #region Initializers public frmSettings() { InitializeComponent(); lblMessage.Text = "Please create or open a setting file."; gvSettings.DataSource = _dt; //Populate_grid_View_with_dummy_data(); } private void Populate_grid_View_with_dummy_data() { string[] row0 = {"Address", "76 Douglas St Wakecorn"}; string[] row1 = {"Property name", "Wakecorn University"}; string[] row2 = {"Building", "C Block"}; string[] row3 = { "Room", "C2.18"}; gvSettings.Rows.Add(row0); gvSettings.Rows.Add(row1); gvSettings.Rows.Add(row2); gvSettings.Rows.Add(row3); } #endregion #region Buttons private void mnuQuit_Click(object sender, EventArgs e) { Application.Exit(); } private void btnClose_Click(object sender, EventArgs e) { if (SaveIfModified()) Close(); } #endregion Buttons #region File menu strip actions private void mmuSaveAs_Click(object sender, EventArgs e) { Cursor = Cursors.WaitCursor; saveFD.FileName = FileName; try { saveFD.Title = "Save a CSV File as desired."; saveFD.Filter = "CSV|*.csv"; saveFD.FileName = "default"; txtFilePath.Text = openFD.FileName; if (saveFD.ShowDialog(this) == DialogResult.OK) _dt = _objSetting.ProcessSettingFileCMD(saveFD.FileName); } catch (Exception ex) { Debug.WriteLine(String.Format("Error writing to {0}.\r\n\r\n{1}", FileName, ex.Message)); } finally { Cursor = Cursors.Default; } }
Мой класс настроек, в котором таблица данных передается туда и обратно в методы CRUD.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Data; using CsvFile; using System.Diagnostics; public class Setting { #region Variables private int[] _intArrRow; private int _intCsvRow = 4; private DataTable _dt; DataColumn _dclColumnDescription = new DataColumn("Description", typeof(string)); DataColumn _dclColumnData = new DataColumn("Data", typeof(string)); #endregion #region Mutator Methods public DataTable ProcessSettingFileCMD(string filePath) { //READ if (_dt == null) { populateControlWithCSVData(filePath); } //WRITE else if (_dt != null) { if (_dt.Rows.Count > 0) { WriteFile(filePath); } } return _dt; } #endregion #region CRUD Methods private int GetTotalColumnsInTable() { int maxColumn = 0; foreach (DataRow row in _dt.Rows) { if (_dt.Columns.Contains("{0}") || _dt.Columns.Contains("{1}")) { for(int col = row.ItemArray.Length -1; col >= 0; col--) { if(row.ItemArray.GetValue(col) != null) { if (maxColumn < (col + 1)) maxColumn = (col + 1); continue; } } } } return maxColumn; } private void WriteFile(string filename) { int numColumns = GetTotalColumnsInTable(); using (var writer = new CsvFileWriter(filename))//I'm using this guy's class. http://www.blackbeltcoder.com/Articles/files/reading-and-writing-csv-files-in-c { foreach (DataRow row in _dt.Rows) { if (row != _dt.Rows[0]) { List<string> columns = new List<string>(); for (int col = 0; col < numColumns; col++) columns.Add((string)row.ItemArray.GetValue(col) ?? String.Empty); writer.WriteRow(columns); } } } } private void populateControlWithCSVData(string filePath) { _dt = new DataTable(); List<string> columns = new List<string>(); using (var reader = new CsvFileReader(filePath))//I'm using this guy's class. http://www.blackbeltcoder.com/Articles/files/reading-and-writing-csv-files-in-c { _dt.Columns.Add(_dclColumnDescription); _dt.Columns.Add(_dclColumnData); while (reader.ReadRow(columns)) { _dt.Rows.Add(columns.ToArray()); } } } #endregion }
Что я уже пробовал:
Я использую библиотеку и проект этого парня http://www.blackbeltcoder.com/Articles/files/reading-and-writing-csv-files-in-c# Я пытаюсь абстрагировать его и интегрировать в свой, потому что мне нужна таблица данных, глобально доступная для приложения. Это было легко с чтением данных из csv, так как я только действительно рефакторинг кода, но теперь, когда я пытаюсь писать в csv, это становится грязным.
Christian Graus
Почему на Земле люди используют ASP.NET-что?