Как заполнить C # DatagridView с Mongodb?

Я немного застрял, заполняя свой DataGrid данными из MongoDB. Вот мои достижения:

    protected static IMongoClient cliente = new MongoClient("mongodb://localhost/?safe=true");
    protected static IMongoDatabase data = cliente.GetDatabase("base");

    private void Formulario_load(object sender, EventArgs e)
    {
        var coleccion = data.GetCollection("empleados");
        var filtro = Builders.Filter.Empty;
        var cursor = coleccion.Find(filtro);
        var listado = cursor.ToList();

        DataTable dt = new DataTable();
        dt.Columns.Add("nombre", typeof(string));
        dt.Columns.Add("rol", typeof(string));

        foreach (var item in listado)
        {
            dt.Rows.Add(item["nombre"]);
            dt.Rows.Add(item["rol"]);
        }
        dataGridView1.DataSource = dt;
    }

Это экранная печать того, как он показывает мне данные:

Mostrar Imagen

1
задан 12.10.2016, 20:50
2 ответа

Это форма, в которой он решает мою проблему, я надеюсь, что кто-то он полезный. Привет

using MongoDB.Driver;
using MongoDB.Bson;
using MongoDB.Driver.Linq;

    namespace Administrador
    {
    public partial class FrmTodos : Form
    {
    public FrmTodos()
    {
        InitializeComponent();
    }
    public class Entity
    {
        public ObjectId Id { get; set; }
        public string nombre { get; set; }
        public string rol { get; set; }
        public string ruta { get; set; }
    }

    private void FrmTodos_Load(object sender, EventArgs e)
    {
        var connectionString = "mongodb://localhost";
        var client = new MongoClient(connectionString);
        var server = client.GetServer();
        var database = server.GetDatabase("base_datos");
        var collection = database.GetCollection<Entity>("empleados");
        BindingList<Entity> doclist = new BindingList<Entity>();
        foreach (var deger in collection.FindAll())
        {
            doclist.Add(deger);

            string[] row1 = new string[] { deger.nombre.ToString() };
            string[] row2 = new string[] { deger.rol.ToString() };
            string[] row3 = new string[] { deger.ruta.ToString() };     

            dataGridView1.Rows.Add(row1);
            dataGridView1.Rows.Add(row2);
            dataGridView1.Rows.Add(row3);
            Application.DoEvents();

        }
        dataGridView1.DataSource = doclist;
        dataGridView1.Columns[1].HeaderText = "IDD";
        dataGridView1.Columns[2].HeaderText = "Nombre";
        dataGridView1.Columns[3].HeaderText = "Rol";
    }
0
ответ дан 24.11.2019, 13:11
  • 1
    ты не был бы должен загружать данные посредством Rows. Add () это не правильно, он был хорошо распределять DataSource больше ты можешь распределять прямой doclist grid –  Leandro Tuttini 06.10.2016, 19:46
  • 2
    этот код неправильный, если ты используешь Rows. Add () ты не используешь DataSource это один или другой –  Leandro Tuttini 07.10.2016, 04:52

Если ты инспектируешь DataTable, что ты распределяешь grid, ты можешь видеть, что у columan списка есть данные, он использует технику descripta в статье, чтобы это санкционировать:

Дебугхинг Дата Визуальный Tables in Studio

Si мы отказываемся от предыдущей тогда точки

  • ты мог бы пытаться распределения свойства AutoGenerateColumns = true, таким образом, автоматически он произведет колонны как данные. Это позволяет санкционировать, что информация, что ты распределяешь правильно

  • grid, если ты определяешь колонны во времени diseГ±o, помнит что распределяет свойство DataPropertyName с именем колонны, в этом случае "списке", так как а ты делаешь это grid, он не будет знать, как mapear информация с columan grid и он покажет ее пустая

1
ответ дан 24.11.2019, 13:11

Теги

Похожие вопросы