DataGridView копирование значения ячейки при условии - Visual Basic .NET

  1. Всем привет! =) Необходимо замутить такую фишку:если в DataGridView4 в первом столбце он находит дубликат в DataGridView1(в первом столбце), то надо скопировать значение DataGridView4 12 столбца в DataGridView1 также в 12 столбец, и так по всем повторениям, которые найдёт. Вот шаблончик, Прошу экспертной помощи =)vb.net1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18   Dim i&, ii&           For i = 0 To DataGridView4.Rows.Count - 2                 For ii = i + 1 To DataGridView4.RowCount - 2                     If DataGridView4.Rows(i).Cells(0).Value.ToString() = DataGridView1.Rows(ii).Cells(0).Value.ToString() Then                       '  MsgBox(DataGridView4.Rows(i).Cells(0).Value.ToString())                     DataGridView4.Rows(i).Cells(12).ToString()                   End If               Next           Next


textual

Код:

dgv1.datasourse=tbl1
dgv2.datasourse=tbl2
For each dRow as datarow in tbl1.rows
    dim Id=dRow(“ColumnID")
     dim dRow2 as DataRow=tbl2.rows.find(id) 
      If dRow2 IsNot Nothing Then dRow("Столбец12")=dRow2("Столбец12")
Next


Похожие ответы
  1. Доброе время суток. Подскажите пожалуйста, как использовать условие отображения информация в DataGridView1 если в DataGridView2 имееются похожие записи?vb.net1 2 3 4 5 6 7         For i = 0 To DataGridView1.Rows.Count - 1             For ii = 0 To DataGridView2.Rows.Count - 1                 If DataGridView1.Rows(i).Cells(0).Value.ToString Like DataGridView2.Rows(ii).Cells(0).Value.ToString Then                     DataGridView1.Rows(i).Cells(0).Value = "ADMIN"                 End If             Next         Next

  1. Здравствуйте! Есть таблица DataGridView всего 4 колонки: | чекбокс | текст | текст | текст | И есть строка: 3|False|стол|стул|скатерть|True|цветок|дерево|лист|False|небо|солнце|земля где первый символ (или несколько символов) до первого сплита означает кол-во строк, а далее уже данные для ячеек. Подскажите, пожалуйста, как корректно заполнить таблицу из подобной строки?

  1. Уважаемые форумчане,прошу вашей помощи. Есть 5 марок автомоб*илей, у каждой марки свой приоритет: Mer*cedes,BMW,Hyundai,Mi*tshubishi,Nissan. Ка*ждый из сотрудников должен сначала взять по времени самый по*здний Мерс, затем по времени смотрит, ес*ли есть еще свободный Мерс, то закрепляе*тся строго за ней.Ес*ли Мерсы все закрепл*ены, переходит к мар*ке BMW(алгоритм тот же самый), и так все марки. Задача: отсл*еживать в таблице тех сотрудников которые взяли в работу авто не по порядку и не по времени красным цветом как в примере.

  1. Привет всем! Подскажите, пожалуйста, каким образом сделать так, чтобы вся активная строка моей DataGridView обводилась контуром выбранного цвета, а после того, как эта строка становилась неактивной, это обведение исчезало? С отдельной ячейкой понятно, использую CellPainting, но вот как всю активную строку обводить? Спасибо!Добавлено через 12 часов 35 минут Решил задачку. Кому интересно, вот код на VB:vb.net1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83     Dim SelectionBackColor, SelectionBorderColor As Color     Dim FirstVisibleColumnName, LastVisibleColumnName As String       ' функция установки яркости (Value) исходного цвета (Color)       Public Function Brightness(ByVal Color As Color, ByVal Value As Short) As Color           Dim c As Integer = Value           Dim r As Integer = Color.R + c         Dim g As Integer = Color.G + c         Dim b As Integer = Color.B + c           If r > 255 Then r = 255         If g > 255 Then g = 255         If b > 255 Then b = 255           If r < 0 Then r = 0         If g < 0 Then g = 0         If b < 0 Then b = 0           Return Color.FromArgb(r, g, b)       End Function       Private Sub SetColumnsSettings()           With DataGridView1               ' установка цветов               SelectionBackColor = Color.FromArgb(204, 232, 255)             SelectionBorderColor = Brightness(SelectionBackColor, -40)               .DefaultCellStyle.SelectionBackColor = SelectionBackColor               ' нахождение первой и последней видимой в DataGridView колонок               Dim p As Boolean = True               For Each c As DataGridViewColumn In .Columns                 If c.Visible Then                     If p Then FirstVisibleColumnName = c.Name : p = False Else LastVisibleColumnName = c.Name                 End If             Next           End With       End Sub       Private Sub DataGridView1_VisibleChanged(sender As Object, e As EventArgs) Handles DataGridView1.VisibleChanged         If DataGridView1.Visible Then SetColumnsSettings()     End Sub       Private Sub DataGridView1_SelectionChanged(sender As Object, e As EventArgs) Handles DataGridView1.SelectionChanged         DataGridView1.Invalidate()     End Sub       Private Sub DataGridView1_CellPainting(sender As Object, e As DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting           If e.RowIndex = DataGridView1.CurrentCell.RowIndex Then               Dim b As Rectangle = DataGridView1.GetRowDisplayRectangle(e.RowIndex, False)               Dim bl As Rectangle = DataGridView1.GetColumnDisplayRectangle(DataGridView1.Columns(LastVisibleColumnName).Index, False)               Dim w As Integer = bl.Left + bl.Width - 1               If w < 0 Then w = b.Left + b.Width               b = New Rectangle(b.X, b.Y, w, b.Height - 1)               e.Paint(b, DataGridViewPaintParts.All Or DataGridViewPaintParts.Border)               Using p As New Pen(SelectionBorderColor, 1)                 e.Graphics.DrawRectangle(p, b)             End Using               e.Handled = True           End If       End SubCвойство SelectionMode вашей DataGridView должно быть установлено в FullRowSelect

  1. Всем здравствуйте. Например, Columns(0) с именем BDate (дата) содержит Дату (это вводит пользователь). Columns(1) с именем Month (число) должен на основании содержимого столбца BDate заполняться номером соответствующего этой дате месяца (DatePart...). Заполнение столбца Month должно происходить автоматически, сразу после ввода пользователем значения даты в столбце BDate.

  1. Доброго времени суток всем. Товарищи, прошу помощи, мозг кипит и прочее... Есть база в access. Там некоторые события по датам. отображается так: Есть форма, в которую происходит выгрузка из базы в dataviewgrid На форме есть 2 DateTimePicker (Date_From и Date_To) в коде пишу:vb.net1 2 3 4 Dim str_date_from As String = Date_From.Value.Date Dim str_date_to As String = Date_To.Value.Date   tmpStr = "SELECT * FROM [main_base] WHERE [Дата] BETWEEN ('" & str_date_from & "') AND ('" & str_date_to & "')"и далее запрос к базе... не дает, не делает, не запускает. Наверно, где-то на форуме есть похожая тема, но схожие посмотрел, опробовал, не помогает. Хелп!!!

  1. Гуру vb.net помогите разобраться. Нужна была удобная колонка для ввода суммы, нашел на просторах интернета этот вариант:vb.net1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 Public Class DataGridViewNumericColumn     Inherits DataGridViewColumn       Public Sub New()         MyBase.New(New NumericUpDownCell())     End Sub       Public Overrides Property CellTemplate() As DataGridViewCell         Get             Return MyBase.CellTemplate         End Get         Set(ByVal value As DataGridViewCell)             ' Ensure that the cell used for the template is a CalendarCell.             If Not (value Is Nothing) AndAlso Not value.GetType().IsAssignableFrom(GetType(NumericUpDownCell)) Then                 Throw New InvalidCastException("Must be a NumericUpDownCell")             End If             MyBase.CellTemplate = value         End Set     End Property   End Class     Public Class NumericUpDownCell     Inherits DataGridViewTextBoxCell       Public Sub New()         ' Use the short date format.         ' Me.Style.Format = "#.##"     End Sub       Public Overrides Sub InitializeEditingControl(ByVal rowIndex As Integer, ByVal initialFormattedValue As Object, ByVal dataGridViewCellStyle As DataGridViewCellStyle)         ' Set the value of the editing control to the current cell value.         MyBase.InitializeEditingControl(rowIndex, Me.Value, dataGridViewCellStyle) 'initialFormattedValue           Dim ctl As NumericUpDownEditingControl = CType(DataGridView.EditingControl, NumericUpDownEditingControl)         ctl.Value = 0.00           Select Case dataGridViewCellStyle.Format             Case "n0"                 ctl.DecimalPlaces = 0             Case "n1"                 ctl.DecimalPlaces = 1             Case "n2", "c2"                 ctl.DecimalPlaces = 2         End Select             If Not Me.Value Is DBNull.Value Then             If Not Me.Value Is Nothing Then                 ctl.Value = Me.Value             End If         End If       End Sub       Public Overrides ReadOnly Property EditType() As Type         Get             ' Return the type of the editing contol that CalendarCell uses.             Return GetType(NumericUpDownEditingControl)         End Get     End Property       Public Overrides ReadOnly Property ValueType() As Type         Get             ' Return the type of the value that CalendarCell contains.             Return GetType(Decimal)         End Get     End Property       Public Overrides ReadOnly Property DefaultNewRowValue() As Object         Get             ' Use the current date and time as the default value.             Return Nothing         End Get     End Property   End Class     Class NumericUpDownEditingControl     Inherits NumericUpDown     Implements IDataGridViewEditingControl       Private dataGridViewControl As DataGridView     Private valueIsChanged As Boolean = False     Private rowIndexNum As Integer       Public Sub New()           Me.DecimalPlaces = 2         Minimum = 0         Maximum = 9999999999         Value = 0.00       End Sub       Public Property EditingControlFormattedValue() As Object Implements IDataGridViewEditingControl.EditingControlFormattedValue         Get             Return Me.Value.ToString '("#.##")         End Get         Set(ByVal value As Object)             If TypeOf value Is Decimal Then                 Me.Value = Decimal.Parse(value.ToString)             End If         End Set     End Property       Public Function GetEditingControlFormattedValue(ByVal context As DataGridViewDataErrorContexts) As Object Implements IDataGridViewEditingControl.GetEditingControlFormattedValue         Return Me.Value.ToString '("#.##")     End Function       Public Sub ApplyCellStyleToEditingControl(ByVal dataGridViewCellStyle As DataGridViewCellStyle) Implements IDataGridViewEditingControl.ApplyCellStyleToEditingControl         Me.Font = dataGridViewCellStyle.Font         Me.ForeColor = dataGridViewCellStyle.ForeColor         Me.BackColor = dataGridViewCellStyle.BackColor     End Sub       Public Property EditingControlRowIndex() As Integer Implements IDataGridViewEditingControl.EditingControlRowIndex         Get             Return rowIndexNum         End Get         Set(ByVal value As Integer)             rowIndexNum = value         End Set     End Property       Public Function EditingControlWantsInputKey(ByVal key As Keys, ByVal dataGridViewWantsInputKey As Boolean) As Boolean Implements IDataGridViewEditingControl.EditingControlWantsInputKey         ' Let the DateTimePicker handle the keys listed.         Select Case key And Keys.KeyCode             Case Keys.Left, Keys.Up, Keys.Down, Keys.Right, Keys.Home, Keys.End, Keys.PageDown, Keys.PageUp                 Return True             Case Else                 Return False         End Select     End Function       Public Sub PrepareEditingControlForEdit(ByVal selectAll As Boolean) Implements IDataGridViewEditingControl.PrepareEditingControlForEdit         ' No preparation needs to be done.     End Sub       Public ReadOnly Property RepositionEditingControlOnValueChange() As Boolean Implements IDataGridViewEditingControl.RepositionEditingControlOnValueChange         Get             Return False         End Get     End Property       Public Property EditingControlDataGridView() As DataGridView Implements IDataGridViewEditingControl.EditingControlDataGridView         Get             Return dataGridViewControl         End Get         Set(ByVal value As DataGridView)             dataGridViewControl = value         End Set     End Property       Public Property EditingControlValueChanged() As Boolean Implements IDataGridViewEditingControl.EditingControlValueChanged         Get             Return valueIsChanged         End Get         Set(ByVal value As Boolean)             valueIsChanged = True 'value         End Set     End Property       Public ReadOnly Property EditingControlCursor() As Cursor Implements IDataGridViewEditingControl.EditingPanelCursor         Get             Return MyBase.Cursor         End Get     End Property       Protected Overrides Sub OnValueChanged(ByVal eventargs As EventArgs)         ' Notify the DataGridView that the contents of the cell have changed.         valueIsChanged = True         Me.EditingControlDataGridView.NotifyCurrentCellDirty(True)         MyBase.OnValueChanged(eventargs)     End Sub End ClassПроблема такая, если в Datagridview строка не последняя, то введенное значение принимается и отображается в ячейке, если строка последняя значение вроде как принимается и строка новая создается (DatagridView c параметром AllowUserToAddRows=True) но не отображается, отображается только после повторного ввода. Как сделать чтобы в последней строке введенное значение сразу отображалось?

  1. В Visual Basic 2010 создаю текстовый редактор. Не выходит с "Правкой". Скину то, что есть, помогите кто может с "Копировать", "Вставить", "Вырезать", "Удалить" и Выравниванием по центру, слева, справа. Заранее спасибо!vb.net1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 Public Class Form1       Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load         TextBox1.multiline = True         TextBox1.Clear()         Me.Text = "Простой текстовый редактор"         OpenFileDialog1.FileName = Nothing         OpenFileDialog1.Filter = "Текстовые файлы (*.txt) |'.txt|A11 files (*.*)|*.*"         SaveFileDialog1.Filter = "Текстовые файлы (f.txt) |*.txt|A11 files (*.*)|*.*"     End Sub     Private Sub ФайлToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ФайлToolStripMenuItem.Click         OpenFileDialog1.ShowDialog()         If OpenFileDialog1.FileName = Nothing Then Exit Sub         Try             Dim Читатель As New IO.StreamReader(OpenFileDialog1.FileName, System.Text.Encoding.GetEncoding(1251))             Читатель.Close()         Catch Exc As System.IO.FileNotFoundException             MessageBox.Show("Нет такого файла", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)         Catch Exc As Exception             MessageBox.Show(Exc.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)           End Try     End Sub     Private Sub СохранитьКакToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles СохранитьКакToolStripMenuItem.Click         SaveFileDialog1.FileName = SaveFileDialog1.FileName         If SaveFileDialog1.ShowDialog = DialogResult.OK Then Запись()     End Sub     Sub Запись()         Try             Dim Писатель As New IO.StreamWriter(SaveFileDialog1.FileName, False, System.Text.Encoding.GetEncoding(1251))             Писатель.Write(TextBox1.Text)             Писатель.Close()             TextBox1.Modified = False         Catch Exc As Exception             MessageBox.Show(Exc.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)         End Try     End Sub     Private Sub ВыходToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ВыходToolStripMenuItem.Click         Me.Close()     End Sub     Private Sub Form1_Closeing(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing         If TextBox1.Modified - False Then Exit Sub         Dim MBox As DialogResult         MessageBox.Show("Текст был изменен." & vbCrLf & "Сохранить изменения?", "Простой редактор", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation)         If MBox = DialogResult.No Then Exit Sub         If MBox = DialogResult.Cancel Then e.Cancel = True         If MBox = DialogResult.Yes Then             If SaveFileDialog1.ShowDialog = DialogResult.OK Then                 Запись() : Exit Sub             Else                 e.Cancel = True             End If         End If     End Sub         Private Sub ВставитьToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ВставитьToolStripMenuItem.Click         Clipboard.Clear()         Clipboard.SetText(RichTextBox1.SelectedText)         RichTextBox1.SelectedText = Clipboard.GetText()     End Sub       Private Sub ШрифтToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ШрифтToolStripMenuItem.Click         FontDialog1.ShowColor = True         FontDialog1.ShowDialog()         RichTextBox1.SelectionFont = FontDialog1.Font         RichTextBox1.SelectionColor = FontDialog1.Color     End Sub       Private Function FontDialog1() As Object         Throw New NotImplementedException     End Function

  1. Как в DataGridView изменить ширину столбцов.