2015-12-31 2 views
1

У меня есть странное поведение, в котором я не получаю ошибку, но она не работает, как я предполагаю.WinForms DataGridView и использование DataGridViewColumns

Я использую datagridview и 2 datagridviewcomboboxcolumns.

Первое поле со списком работает правильно, но когда я добавляю привязку столбцов ко второму, первое поле со списком перестает работать, поскольку оно кажется не подбираемым, а раскрывающееся меню не работает, а второе продолжает работать, но не имеет возвращаемого значения (это подсказка, я думаю;)). Я просто не совсем понимаю, что мне не хватает или не работает правильно.

изображение: view of program

здесь соответствующее кодирование:

DataTable Заливка:

public static DataTable ParseCitiesToDataTable() 
{ 
DataTable dataCities = new DataTable(); 
dataCities.Clear(); 
dataCities.TableName = "CityList"; 
dataCities.Columns.Add("Type"); 
dataCities.Columns.Add("City"); 
dataCities.Columns.Add("Coord"); 
dataCities.Columns.Add("BattleCity"); 
dataCities.Columns.Add("Dist"); 
dataCities.Columns.Add("Speed"); 
dataCities.Columns.Add("TimeSec"); 
dataCities.Columns.Add("SendTime"); 
dataCities.Columns.Add("TimeTilSend"); 

foreach (City city in userCities) 
{ 
    DataRow _cityDetails = dataCities.NewRow(); 
      _cityDetails["Type"] = "None"; 
      _cityDetails["City"] = city.strCityName; 
      _cityDetails["Coord"] = city.strCityCoord; 
      _cityDetails["BattleCity"] = ""; 
      _cityDetails["Dist"] = "0"; 
      _cityDetails["Speed"] = "Ram"; 
      _cityDetails["TimeSec"] = ""; 
      _cityDetails["SendTime"] = ""; 
      _cityDetails["TimeTilSend"] = "0"; 
      dataCities.Rows.Add(_cityDetails); 
     }} 

нажатие кнопки Функция:

private async void btn_GetMyCities_Click(object sender, EventArgs e) 
    { 
     btnGetCities.Hide(); // hide button pressed and show progress bar 
     await Task.Delay(1000); 
     // 
     userCities.Clear(); 
     if (dtCities != null && dtCities.Rows.Count > 0) 
      dtCities.Clear(); 
     int intPages; 
     strUserID = txtUserID.Text; 
     if (strUserID.Length > 0) 
     { 
      pBarWebPull = new ProgressBar(); 
      gbxInternetLookup.Controls.Add(pBarWebPull); 
      pBarWebPull.Width = 260; 
      pBarWebPull.Top = 15; 
      pBarWebPull.Left = 5; 
      pBarWebPull.Value = 0; 
      pBarWebPull.Visible = true; 
      pBarWebPull.BringToFront(); 
      pBarWebPull.Show(); 
      string strWorld = txtUserWorld.Text.ToLower(); 
      string strWebPageURLBase = "http://tw2stats.com/world/" + strWorld + "/player/" + strUserID + "/towns"; 
      // get page count 
      intPages = ReturnNumberOfLookupPages(strWebPageURLBase); 
      string[] strCitiesArray; 
      strCitiesArray = GetWebPageCities(strWebPageURLBase, intPages); 
      dtCities = ParseCitiesToDataTable(); 
      bindingSourceCities.DataSource = dtCities; 
      dGVCities.DataSource = bindingSourceCities; 
      dGVCities.Sort(this.dGVCities.Columns["City"], ListSortDirection.Ascending); 
      dGVCities.Columns[1].ReadOnly = true; 
      gbxInternetLookup.Controls.Remove(pBarWebPull); 

     } 
     else 
     { 
      MessageBox.Show("Please Enter your Tribal Wars 2 ID"); 
     } 
     btnGetCities.Show(); 
    } 

private void InitCitiesDataGridView() 
    { 
     DataGridViewComboBoxColumn comboBoxCol = new DataGridViewComboBoxColumn(); 
     comboBoxCol.HeaderText = "Attk Type"; 
     comboBoxCol.DataSource = AttackTypeChoice.GetChoices(); 
     comboBoxCol.DisplayMember = "Name"; 
     comboBoxCol.ValueMember = "Value"; 
     comboBoxCol.DefaultCellStyle.NullValue = "None"; 
     comboBoxCol.DefaultCellStyle.DataSourceNullValue = "None"; 
     comboBoxCol.ValueType = typeof(string); 
     dGVCities.Columns.Add(comboBoxCol); 
     dGVCities.Columns[0].Name = "Type"; 
     dGVCities.Columns[0].Width = 65; 
     dGVCities.Columns[0].SortMode = DataGridViewColumnSortMode.Programmatic; 
     dGVCities.Columns.Add("City", "City"); 
     dGVCities.Columns[1].SortMode = DataGridViewColumnSortMode.Programmatic; 
     dGVCities.Columns[1].Width = 120; 
     dGVCities.Columns.Add("Coord", "Coord"); 
     dGVCities.Columns[2].Width = 60; 
     dGVCities.Columns[2].SortMode = DataGridViewColumnSortMode.Programmatic; 
     dGVCities.Columns.Add("BattleCity", "Attk City"); 
     dGVCities.Columns[3].Width = 75; 
     dGVCities.Columns[3].SortMode = DataGridViewColumnSortMode.Programmatic; 
     dGVCities.Columns.Add("Dist", "Dist"); 
     dGVCities.Columns[4].Width = 60; 
     dGVCities.Columns[4].SortMode = DataGridViewColumnSortMode.Programmatic; 
     DataGridViewComboBoxColumn comboBoxCol1 = new DataGridViewComboBoxColumn(); 
     comboBoxCol1.HeaderText = "Speed"; 
     comboBoxCol1.DataSource = TroopTypeChoice.GetChoices(); 
     comboBoxCol1.DisplayMember = "Name"; 
     comboBoxCol1.ValueMember = "Value"; 
     comboBoxCol1.DefaultCellStyle.NullValue = "Ram"; 
     comboBoxCol1.DefaultCellStyle.DataSourceNullValue = "Ram"; 
     comboBoxCol1.ValueType = typeof(string); 
     dGVCities.Columns.Add(comboBoxCol1); 
     dGVCities.Columns[5].Name = "Speed"; 
     dGVCities.Columns[5].Width = 80; 
     dGVCities.Columns[5].SortMode = DataGridViewColumnSortMode.Programmatic; 
     dGVCities.Columns.Add("TimeSec", "Time (sec)"); 
     dGVCities.Columns[6].Width = 50; 
     dGVCities.Columns[6].SortMode = DataGridViewColumnSortMode.Programmatic; 
     dGVCities.Columns.Add("Span", "Span d:h:m:s"); 
     dGVCities.Columns[7].Width = 65; 
     dGVCities.Columns[7].SortMode = DataGridViewColumnSortMode.Programmatic; 
     dGVCities.Columns.Add("SendDT", "Send Date"); 
     dGVCities.Columns[8].Width = 120; 
     dGVCities.Columns[8].SortMode = DataGridViewColumnSortMode.Programmatic; 
     dGVCities.Columns.Add("TimeTilSend", "Till Send"); 
     dGVCities.Columns[9].Width = 70; 
     dGVCities.Columns[9].SortMode = DataGridViewColumnSortMode.Programmatic; 
     dGVCities.Columns[0].DataPropertyName = "Type"; 
     dGVCities.Columns[1].DataPropertyName = "City"; 
     dGVCities.Columns[2].DataPropertyName = "Coord"; 
     dGVCities.Columns[3].DataPropertyName = "BattleCity"; 
     dGVCities.Columns[4].DataPropertyName = "Dist"; 
     dGVCities.Columns[5].DataPropertyName = "Speed"; 
     dGVCities.Columns[6].DataPropertyName = "TimeSec"; 
     dGVCities.Columns[7].DataPropertyName = "SendTime"; 
     dGVCities.Columns[8].DataPropertyName = "TimeTilSend"; 
} 

Когда добавляется в нем перестает работать , Таким образом, проблема заключается либо в первом comboboxcolumn, либо во втором.

dGVCities.Columns [5] .DataPropertyName = "Speed";

ответ

0

dGVCities.Columns[1].ReadOnly = true;

была проблема. Столбец [1] должен быть именем города. когда я заменил его

dGVCities.Columns["City"].ReadOnly = true;

колонна начала работать. Я решил попробовать это после того, как я заметил, что столбец названия города разрешает ввод, который мне не нужен, и после модификации проблема исчезла.

Я предполагаю, что вытащить из этого, используйте по возможности столбцы с именами, чтобы вы случайно не попали в неправильный столбец.

Извините за беспокойство.

Смежные вопросы