C# WinForms DataGridView,并使用DataGridViewColumns

C# WinForms DataGridView,并使用DataGridViewColumns,c#,winforms,datagridview,C#,Winforms,Datagridview,我有一些奇怪的行为,我没有得到一个错误,但它没有像我想的那样工作 我使用的是一个datagridview和两个datagridviewcomboboxcolumns 第一个组合框工作正常,但当我在第二个组合框上添加列绑定时,第一个组合框停止工作,因为它似乎不可选择,下拉列表不工作,第二个继续工作,但没有返回值(我认为这是一个线索;))。我只是不太明白我遗漏了什么或者做得不对 图片: 以下是相关编码: 数据表填充: public static DataTable ParseCitiesToData

我有一些奇怪的行为,我没有得到一个错误,但它没有像我想的那样工作

我使用的是一个datagridview和两个datagridviewcomboboxcolumns

第一个组合框工作正常,但当我在第二个组合框上添加列绑定时,第一个组合框停止工作,因为它似乎不可选择,下拉列表不工作,第二个继续工作,但没有返回值(我认为这是一个线索;))。我只是不太明白我遗漏了什么或者做得不对

图片:

以下是相关编码:

数据表填充:

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";
}
当这一点被添加到它停止工作。所以问题要么在第一列,要么在第二列


dGVCities.Columns[5].DataPropertyName=“速度”

dGVCities.Columns[1]。只读=true

这就是问题所在。第[1]列应为城市名称。当我把它换成

dGVCities.Columns[“City”].ReadOnly=true

专栏开始运作了。在我注意到city name列允许输入后,我决定试试这个,这是我不想要的,修改后,问题消失了

我想这样做的好处是,尽可能使用命名列,以免无意中访问错误的列


很抱歉打扰您。

dGVCities.Columns[1]。ReadOnly=true

这就是问题所在。第[1]列应为城市名称。当我把它换成

dGVCities.Columns[“City”].ReadOnly=true

专栏开始运作了。在我注意到city name列允许输入后,我决定试试这个,这是我不想要的,修改后,问题消失了

我想这样做的好处是,尽可能使用命名列,以免无意中访问错误的列

抱歉打扰了