【问题标题】:Datagridviewcomboboxcolumn showing blank on loadDatagridviewcomboboxcolumn 在加载时显示空白
【发布时间】:2021-10-13 08:08:55
【问题描述】:

我有 1 个网格视图。在网格视图单元格单击时,它将在另一个gridview 中显示相关数据。

现在另一个gridview 拥有DataGridViewComboBoxColumn

它的数据正在加载,但在加载时显示为空白。 当我点击 DataGridViewComboBoxColumn 时它会显示。

我想要的是显示数据而不是空白。

这将填充"grdAgingInvoice" gridview 其他列

public void grdAgingeInvoice(int RowIndex) {
  DataTable DTCombo = new DataTable();
  try {
    var AgingeInvoice = new DataTable();
    var tEMP = new DataTable();
    string Query;
    grdAgingInvoice.DataSource = null;
    grdAgingInvoice.Columns.Clear();
    Query = "Select Aging, DueInvoiceNo, DueDate,  Balance,CompanyID from AgingInvoice where CompanyID=" + grdCompany.Rows[RowIndex].Cells["CompanyID"].Value.ToString() + " Order by Aging Desc";
    AgingeInvoice = StMethod.GetListDT<DueInvoice>(Query);
    AgingeInvoice.Columns.Add("ContactsName");
    AgingeInvoice.Columns.Add("EmailAddress");
    AgingeInvoice.Columns.Add("Summation");
    AgingeInvoice.Columns.Add("Address");
    AgingeInvoice.Columns.Add("Description");
    var Summation = default(decimal);
    foreach (DataRow dr in AgingeInvoice.Rows) {
      Summation = Summation + Convert.ToDecimal(dr["Balance"]);
      dr["Summation"] = Summation;
      string StrAddress = "SELECT ( Contacts.FirstName+' '+Contacts.LastName) AS Contact, Contacts.EmailAddress,Joblist.Address,JobList.Description FROM         JobList INNER JOIN  Contacts ON JobList.ContactsID = Contacts.ContactsID WHERE  JobList.JobNumber= '" + Program.GetJobNumber(dr["DueInvoiceNo"].ToString()) + "'";
      tEMP = StMethod.GetListDT<InvoiceAddress>(StrAddress);
      if (tEMP.Rows.Count > 0) {
        string s1;
        s1 = tEMP.Rows[0]["Contact"].ToString();
        dr["ContactsName"] = tEMP.Rows[0]["Contact"].ToString();
        dr["EmailAddress"] = tEMP.Rows[0]["EmailAddress"].ToString();
        dr["Address"] = tEMP.Rows[0]["Address"].ToString();
        dr["Description"] = tEMP.Rows[0]["Description"].ToString();
      }
    }
    grdAgingInvoice.DataSource = AgingeInvoice;
    string Query2 = string.Empty;
    String query3 = "SELECT (FirstName +' '+ LastName) AS Contact,";
    Query2 = query3 + "EmailAddress,ContactsID ";
    Query2 = Query2 + "FROM contacts ";
    Query2 = Query2 + "WHERE (IsDelete=0 or IsDelete IS NULL) AND Companyid=";
    Query2 = Query2 + grdCompany.Rows[grdCompany.CurrentRow.Index].Cells["CompanyID"].Value.ToString();
    grdAgingInvoice.Columns.Insert(5, AddContactCombo());
    {
      var withBlock = grdAgingInvoice;
      withBlock.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
      withBlock.Columns["CompanyID"].Visible = true;
      withBlock.Columns["DueInvoiceNo"].HeaderText = "Due InvoiceNo";
      withBlock.Columns["DueDate"].HeaderText = "Due Date";

      // .Columns["ContactsName"].HeaderText = "Contacts Name"   'Add to new column In grid view
      withBlock.Columns["EmailAddress"].HeaderText = "Email Address";   // Add to new column In grid view
      withBlock.Columns["Description"].HeaderText = "Job Description";
      withBlock.Columns["ContactsName"].Visible = true;
    }
  }
  catch (Exception ex) {
    MessageBox.Show(ex.Message.ToString());
  }
}

这会将DataGridViewComboBoxColumn 添加到"grdAgingInvoice" gridview

public DataGridViewComboBoxColumn AddContactCombo() {
  DataGridViewComboBoxColumn ComboBoxContactsName = new DataGridViewComboBoxColumn();
  try {
    DataTable dt2 = new DataTable();
    dt2 = StMethod.GetListDT<InvoiceAddress>("SELECT (Contacts.FirstName +' '+ Contacts.LastName) as Contact,Contacts.EmailAddress,ContactsID FROM contacts where (Contacts.IsDelete=0 or Contacts.IsDelete IS NULL) AND Contacts.Companyid=" + grdCompany.Rows[grdCompany.CurrentRow.Index].Cells["CompanyID"].Value.ToString());
    ComboBoxContactsName.DataSource = dt2;
    ComboBoxContactsName.DisplayMember = dt2.Columns["Contact"].ToString();
    ComboBoxContactsName.ValueMember = dt2.Columns["ContactsID"].ToString();
    ComboBoxContactsName.DisplayIndex = 5;
    ComboBoxContactsName.HeaderText = "Contacts Name";
    ComboBoxContactsName.DataPropertyName = dt2.Columns["Contact"].ToString();
    ComboBoxContactsName.Name = "cmbContactsName";
    ComboBoxContactsName.DefaultCellStyle.NullValue = dt2.Columns["Contact"];
    return ComboBoxContactsName;
  }
  catch (Exception ex) {
    return ComboBoxContactsName;
  }
}

【问题讨论】:

  • 你能展示设置网格数据源的代码和它的样子吗?此外,“何时/何地”是将组合框列添加到网格的代码?请edit您的问题清楚地说明带有组合框列的网格是什么样的以及网格的数据源是什么样的。
  • @JohnG。编辑先生
  • 好吧,据我所知,在获取组合框的代码中...ComboBoxContactsName.DataPropertyName = dt2.Columns["Contact"].ToString();...应该是...ComboBoxContactsName.DataPropertyName = "Contact";...正在将组合框列与网格数据源,即名为“联系人”的列。但是,当您查看获取网格表的代码时,我没有在网格表中看到“联系人”字段。但是……我确实看到了一个“ContactsName”字段。
  • 查看第一个代码 sn-p,从查询中我们可以看到列……Aging, DueInvoiceNo, DueDate, Balance, CompanyID……然后手动添加了一些额外的列,但没有一个名为“联系人”。当然,您可以在下面看到“选择”地址的位置,并创建了一个“联系人”列,不幸的是,这个值被提取并放入原始表的“联系人姓名”字段中……dr["ContactsName"] = tEMP.Rows[0]["Contact"].ToString();……这看起来很奇怪,我我打赌您需要将DataPropertyName 设置为“ContactsName”。如果我遗漏了什么,抱歉?
  • 我设置了以下但同样的问题。 ComboBoxContactsName.DisplayMember = dt2.Columns["Contact"].ToString(); ComboBoxContactsName.ValueMember = dt2.Columns["ContactsID"].ToString(); cmbContactsName.DataPropertyName = "联系人姓名";

标签: c# winforms datagridviewcomboboxcolumn


【解决方案1】:

您可以使用DataGridViewComboBoxColumn.DefaultCellStyleNullValue 属性来设置默认的ComboBox 值:

int columnIndex = Your ComboBoxColumn index;
(dataGridView1.Columns[columnIndex] as DataGridViewComboBoxColumn).DefaultCellStyle.NullValue = "Nothing selected";

【讨论】:

  • 我的要求是它应该在加载时显示并且数据会完美显示,但是当我单击 DataGridViewComboBoxColumn 时它们会显示。我是新手,否则我将通过显示图像来解释它。
  • 我说过如何设置一个默认值,以便在单击之前在 Cell 中看到它。
  • 是的。但即使值不为空,它也显示为空白。这是我的图片问题,以获得更好的想法。 codeproject.com/Questions/5314492/…
猜你喜欢
  • 1970-01-01
  • 2012-03-27
  • 2014-10-08
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-13
相关资源
最近更新 更多