Как я могу получить исходное значение из datatable, привязанного к DTGV?
Я пытаюсь получить исходное значение DataRow. DataRow содержит список файлов с некоторой информацией о них... Строки, отображаемые в представлении DataGridView...
Теперь я хочу сделать имена файлов переименовываемыми, для этого мне нужно получить исходное значение редактируемой ячейки(содержащей имя) и текущее(после редактирования)...
Это мой код до сих пор...
Private Property Manager As MetroStyleManager Private WithEvents Data As New DataTable Private WithEvents Binding As New BindingSource Public Sub New(ByVal styleManager As MetroStyleManager) Me.Manager = styleManager InitializeComponent() End Sub ' Register Manager Private Sub Register_Manager_Load() Handles MyBase.Load Me.StyleManager = Manager Register_Tabs.ButtonStyleManager = Manager Load_Design() Load_Sources() Load_Registers() End Sub ' Register Manager: Load Design Private Sub Load_Design() If My.Settings.Main_DarkMode Then Manager.Theme = MetroThemeStyle.Dark Manager.Style = MetroColorStyle.Blue Else Manager.Theme = MetroThemeStyle.Light Manager.Style = MetroColorStyle.Green End If End Sub ' Register Editor: Load DataSources Private Sub Load_Sources() Data.Columns.Add("Register Name", GetType(String)) Data.Columns.Add("Enties", GetType(Int64)) Data.Columns.Add("Last Edit", GetType(DateTime)) Data.Columns.Add("Size (Mb)", GetType(String)) Data.AcceptChanges() Binding.DataSource = Data Register_Grid.DataSource = Binding Register_Grid.Columns(0).ReadOnly = False Register_Grid.Columns(0).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill Register_Grid.Columns(1).ReadOnly = True Register_Grid.Columns(1).AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader Register_Grid.Columns(2).ReadOnly = True Register_Grid.Columns(2).AutoSizeMode = DataGridViewAutoSizeColumnMode.None Register_Grid.Columns(2).Width = 150 Register_Grid.Columns(3).ReadOnly = True Register_Grid.Columns(3).AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader End Sub ' Register Manager: Load Registers Private Sub Load_Registers() Dim directoy = Application.StartupPath() For Each f In New IO.DirectoryInfo(directoy & "\register").GetFiles("*.csv") Dim name As String = f.Name Dim edit As String = f.LastWriteTime Dim entries As Int64 = File.ReadAllLines(f.FullName).Length - 1 Dim size As Decimal = f.Length Data.Rows.Add(name, entries, edit, size.ToString("F3")) Next End Sub
Edit1 Я бы предпочел использовать RowStates для того, чтобы Гендель также удалял строки (тогда файлы тоже должны быть удалены)
Что я уже пробовал:
Я искал решение около 10 часов... И использовал много фрагментов кода, ничего не работало и не возвращало никаких значений, кроме значений "ничего"...
Большинство фрагментов использовали свойства DataRowState или DataViewRowState, но они, похоже, не работают с моим DataTable...
Richard MacCutchan
Вам нужно будет сохранить исходные данные где-нибудь, когда пользователь начнет редактировать ячейку.
[no name]
Вы имеете в виду, что я должен использовать событие CellBeginEdit и сохранить значение в частном Dim Var?
Richard MacCutchan
Это один из способов. Но только вы можете решить, как лучше всего это сделать.
[no name]
Я бы предпочел RowStates, потому что тогда я тоже могу читать удаленные строки :/
Richard MacCutchan
Неважно, какой метод вы выберете, главное, чтобы он делал то, что вы хотите. Единственным критерием является то, что вы можете определить, когда что-то меняется, и таким образом сохранить его текущее состояние. Вы также можете рассмотреть, что происходит, когда что-то было изменено один раз, и пользователь приходит и редактирует его снова.
[no name]
Ну а в тот момент, когда пользователь закончит редактирование, файл будет немедленно переименован( суб будет называться со старым именем и новым именем)
Так что даже если он снова внесет правку, ошибки не будет...
Кроме того, я написал свой собственный файловый менеджер, который будет выполнять все действия с файлами в блоке try, который будет возвращать успех true или false и при необходимости сообщение об ошибке...
Так что единственная часть, которая отсутствует, - это хорошее решение, чтобы получить старое имя...
Richard MacCutchan
Извините, но я не понимаю, в чем проблема. Если ваша подлодка вызывается как со старыми, так и с новыми именами, то именно там вы ее и сохраняете. Вам нужно решить, сколько информации вам нужно захватить, чтобы иметь возможность воссоздать исходное имя в любой момент в будущем.
[no name]
Ну, ладно, может быть, я думал усложнить xD