none
GridView no muestra los datos almacenados en DataSet RRS feed

  • Pregunta

  • Hola a todos, he buscado en muchos foros porque tengo un problema extraño; hay muchos que les funciona pero a mi no y me parece un poco extraño. Os explico, intento recuperar una select de base de datos y mostrar los resultados en un DataGrid... simple.

    Este es el código que uso para cargar los datos:

    string query = "select username from users";
    OleDbCommand cmd = new OleDbCommand(query, conn);
    
    DataSet objDataSet = new DataSet();
    OleDbDataAdapter objDataAdapter = new OleDbDataAdapter(cmd);
    objDataAdapter.Fill(objDataSet,"users");
    
    dataGrid1.ItemsSource = objDataSet.Tables["users"].DefaultView;


    Y así es como tengo definida mi DataGrid:

    <DataGrid Grid.Row="1" x:Name="dataGrid1" AutoGenerateColumns="False" ItemsSource="{Binding}" >
    	<DataGrid.Columns>
    		<DataGridTextColumn Binding="{Binding  Path=username}" Header="UserName" Width="auto" />
    	</DataGrid.Columns>
    </DataGrid>

    El problema es que cuando lo ejecuto, en base de datos tengo 10 usuarios y me pinta 10 filas en el datagrid, pero las 10 vacías. ¿En que me estoy equivocando?

    jueves, 16 de abril de 2015 7:10

Todas las respuestas

  • Hola,

    Pues la verdad es que a mi me funciona, ya se que la respuesta sonara un poco estúpida pero ¿seguro que esa columna tiene datos?

    yo he probado así y funciona perfecto:

    Carga:

                DataSet ds = new DataSet();
                var tbl=new DataTable("users");
                tbl.Columns.Add("username");
                var r=tbl.NewRow();
                r["username"]="David";
                tbl.Rows.Add(r);
                ds.Tables.Add(tbl);
                dataGrid1.ItemsSource = ds.Tables["users"].DefaultView;

    Grid:

            <DataGrid Grid.Row="1" x:Name="dataGrid1" AutoGenerateColumns="False" ItemsSource="{Binding}">
                <DataGrid.Columns>
                    <DataGridTextColumn Binding="{Binding Path=username}" Header="UserName" Width="auto" />
                </DataGrid.Columns>
            </DataGrid>

    jueves, 16 de abril de 2015 11:01
  • hola

    una duda, si asignas el ItemsSource  desde codigo, para que lo haces tambien desde xaml ?

    si haces esto ItemsSource="{Binding}" deberias asignar los datos en el DataContext de contenedor del grid

    si este lo ubicaste sobre la Window entonces asigna los datos a la ventana y ahi si puedes definir el ItemsSource desde xaml

     Show Data in WPF DataGrid using DataSet data template

    >>El problema es que cuando lo ejecuto, en base de datos tengo 10 usuarios y me pinta 10 filas en el datagrid, pero las 10 vacías. ¿En que me estoy equivocando?

    estas seguro que se llama "username" la columna del datatable ?

    podrias poner un breakpoint en el codigo despues de cargar los datos y analizar si se genera esta columna

    imagen

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    jueves, 16 de abril de 2015 13:07
  • Hola, debes eliminar tu ItemsSource del XAML, quedaría algo así:

    <DataGrid Grid.Row="1" x:Name="dataGrid1" AutoGenerateColumns="False">
    	<DataGrid.Columns>
    		<DataGridTextColumn Binding="{Binding  Path=username}" Header="UserName" Width="auto" />
    	</DataGrid.Columns>
    </DataGrid>

    Saludos.

    EDIT: Leandro ya lo ha respondido ;)


    Christian Amado
    Software Engineer | MCPD: Windows Phone Developer | MCTS: Silverlight Developer
    Don't forget to mark the right answer and vote up if helps you.
    MCP Profile


    jueves, 16 de abril de 2015 13:28