none
Лишние столбцы в DataGrid C# RRS feed

  • Вопрос

  • Всем доброго дня! Столкнулся с проблемой - делаю запрос в базу данных, и результат автоматически отображается в datagrid1, но в ней еще появляются лишние столбцы, такие как RowError, RowState, Table, ItemArray, HasError. Если присвоить dataGrid1.AutoGenerateColumns = false, то генерируются пустые строки, хотя при отладке видно, что содержимое в них имеется.

    Кто-нибудь знает решение данной проблемы? Заранее спасибо!

    14 сентября 2011 г. 12:24

Ответы

  • > Если присвоить dataGrid1.AutoGenerateColumns = false, то генерируются пустые строки

    так и должно быть. при false в wpf надо явно задать привязки для столбцов

     

    <Window x:Class="WpfApplication2.Window2"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="Window2" Height="300" Width="300">
        <Grid>
            <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}" x:Name="dg">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="значение"  Binding="{Binding Path='value'}" />
                </DataGrid.Columns>
            </DataGrid>
        </Grid>
    </Window>
    
    using System.Data;
    using System.IO;
    using System.Text;
    using System.Windows;
    
    namespace WpfApplication2
    {
        public partial class Window2 : Window
        {
            public Window2()
            {
                InitializeComponent();
                dg.DataContext = GetData();
            }
    
            DataTable GetData()
            {
                var ds = new DataSet();
                StringBuilder sb = new StringBuilder();
                sb.Append("<root>");
                for(int i=0; i < 50; i++) sb.Append("<item key='k").Append(i).Append("' value='v").Append(i).Append("' />");
                sb.Append("</root>");
                ds.ReadXml(new StringReader(sb.ToString()));
                return ds.Tables["item"];
            }
        }
    }
    
    

     


    • Изменено Malobukv 14 сентября 2011 г. 14:50
    • Помечено в качестве ответа Jashkov Vasily 14 сентября 2011 г. 15:47
    14 сентября 2011 г. 14:44
  • Вы неправильно привязываете данные:

    table1.GetDataBy().ToList();

    Из-за вызова ToList() вы и получаете 4 лишних столбца, которые не несут для вас никакого смысла. Привязывайте просто без вызова ToList():

    dataGrid1.ItemsSource = table1.GetDataBy()

     


    Для связи [mail]
    • Предложено в качестве ответа Abolmasov Dmitry 14 сентября 2011 г. 16:18
    • Помечено в качестве ответа Abolmasov Dmitry 15 сентября 2011 г. 11:24
    14 сентября 2011 г. 16:18

Все ответы

  • Каким образом отображаете данные в гриде?
     
    14 сентября 2011 г. 12:50
    Модератор
  • dataGrid1.ItemsSource = table1.GetDataBy().ToList();
    14 сентября 2011 г. 12:59
  • Что такое GetDataBy? Если функция, то приведите код.
     
    14 сентября 2011 г. 13:15
    Модератор
  • public virtual DataSet1.TABLEDataTable GetDataBy(int Parametr1) {
                this.Adapter.SelectCommand = this.CommandCollection[1];
                this.Adapter.SelectCommand.Parameters[0].Value = ((int)(Parametr1));
                DataSet1.TABLEDataTable dataTable = new DataSet1.TABLEDataTable();
                this.Adapter.Fill(dataTable);
                return dataTable;
            }
    14 сентября 2011 г. 13:41
  • > Если присвоить dataGrid1.AutoGenerateColumns = false, то генерируются пустые строки

    так и должно быть. при false в wpf надо явно задать привязки для столбцов

     

    <Window x:Class="WpfApplication2.Window2"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="Window2" Height="300" Width="300">
        <Grid>
            <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}" x:Name="dg">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="значение"  Binding="{Binding Path='value'}" />
                </DataGrid.Columns>
            </DataGrid>
        </Grid>
    </Window>
    
    using System.Data;
    using System.IO;
    using System.Text;
    using System.Windows;
    
    namespace WpfApplication2
    {
        public partial class Window2 : Window
        {
            public Window2()
            {
                InitializeComponent();
                dg.DataContext = GetData();
            }
    
            DataTable GetData()
            {
                var ds = new DataSet();
                StringBuilder sb = new StringBuilder();
                sb.Append("<root>");
                for(int i=0; i < 50; i++) sb.Append("<item key='k").Append(i).Append("' value='v").Append(i).Append("' />");
                sb.Append("</root>");
                ds.ReadXml(new StringReader(sb.ToString()));
                return ds.Tables["item"];
            }
        }
    }
    
    

     


    • Изменено Malobukv 14 сентября 2011 г. 14:50
    • Помечено в качестве ответа Jashkov Vasily 14 сентября 2011 г. 15:47
    14 сентября 2011 г. 14:44
  • Вы неправильно привязываете данные:

    table1.GetDataBy().ToList();

    Из-за вызова ToList() вы и получаете 4 лишних столбца, которые не несут для вас никакого смысла. Привязывайте просто без вызова ToList():

    dataGrid1.ItemsSource = table1.GetDataBy()

     


    Для связи [mail]
    • Предложено в качестве ответа Abolmasov Dmitry 14 сентября 2011 г. 16:18
    • Помечено в качестве ответа Abolmasov Dmitry 15 сентября 2011 г. 11:24
    14 сентября 2011 г. 16:18