Как получить пользовательский класс в столбце DataTable, отображаемый как class.toString() в GridView?

#c# #asp.net #gridview #datatable #tostring

#c# #asp.net #gridview #datatable #tostring

Вопрос:

У меня есть DataTable, который я привязываю к GridView вот так:

 DataTable WADSItems = new DataTable();
WADSItems.Columns.Add("Category", Type.GetType("System.String"));
WADSItems.Columns.Add("Quantity", Type.GetType("System.Int32"));
WADSItems.Columns.Add("Units", Type.GetType("Tables.PlantWADSUnitsList"));

gvPlantWADS.DataSource = WADSItems;
gvPlantWADS.DataBind();
  

Первые два столбца отображаются нормально, а третий — нет, даже несмотря на то, что класс PlantWADSUnitsList реализует функцию переопределения toString(). Что здесь происходит и как я могу заставить его отображаться?

Ответ №1:

В вашем вопросе отсутствуют некоторые детали, но вот рабочий пример, основанный на предположении, что таблицы.PlantWADSUnitsList имеет следующую структуру:

 public class PlantWADSUnitsList
{
  public string Name { get; set; }
  public string Desc { get; set; }

  public override string ToString()
  {
    return Name   ": "   Desc;
  }
}
  

Используя определение gridview, подобное этому:

 <asp:GridView ID="gvPlantWADS" runat="server" />
  

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

Но если вы отключите AutoGenerateColumns и укажете столбцы самостоятельно, все будет работать нормально:

 <asp:GridView ID="gvPlantWADS" runat="server" AutoGenerateColumns="false">
  <Columns>
    <asp:BoundField HeaderText="Category" DataField="Category" />
    <asp:BoundField HeaderText="Quantity" DataField="Quantity" />
    <asp:BoundField HeaderText="Units" DataField="Units" />
  </Columns>
</asp:GridView>
  

Комментарии:

1. Вы попали в точку! Большое спасибо! Надеялся сохранить их автоматически сгенерированными, но это тоже сработает. =)