1
我试图在主/细节模式下使用GridView从MongoDb服务器获取数据。迭代行结果错误
而且照片显示,我从用户集合中获得Id和名称,然后迭代父行以获取Id,然后在第二个产品集合中获取以获取每个用户的详细信息。
在服务器中,第一个用户只有一个产品,但在图片中显示它3次与2个表。
那么如何得到正确的结果,以及如何与主/ GridView的
namespace TelerikGridView
{
public partial class Form2 : Form
{
List<WatchTblCls> wts;
List<UserCls> user;
List<SymboleCls> symb;
public Form2()
{
InitializeComponent();
wts = new List<WatchTblCls>();
user = new List<UserCls>();
symb = new List<SymboleCls>();
}
private async void button1_Click(object sender, EventArgs e)
{
// add user into datagridview from MongoDB Colelction Watchtbl
var client = new MongoClient("mongodb://servername:27017");
var database = client.GetDatabase("WatchTblDB");
var collectionWatchtbl = database.GetCollection<BsonDocument>("Watchtbl");
var collectionUser = database.GetCollection<BsonDocument>("Users");
//wts = await collectionWatchtbl.Find(x => true).ToListAsync();
//Get User Data
var filter = new BsonDocument();
using (var cursor = await collectionUser.FindAsync(filter))
{
while (await cursor.MoveNextAsync())
{
var batch = cursor.Current;
foreach (var document in batch)
{
user.Add(new UserCls()
{
Id = ObjectId.Parse(document["_id"].ToString()),
Name = document["Name"].ToString()
});
}
}
}
//Get WatchTbl Data
using (var cursor = await collectionWatchtbl.FindAsync(filter))
{
while (await cursor.MoveNextAsync())
{
var batch = cursor.Current;
foreach (var document in batch)
{
wts.Add(new WatchTblCls()
{
Id = ObjectId.Parse(document["_id"].ToString()),
UserId = document["userId"].ToString(),
WID = document["wid"].ToString(),
Name = document["name"].ToString()
//Symbole
});
}
}
}
this.radGridView1.DataSource = user;
this.radGridView1.Columns["fbId"].IsVisible = false;
this.radGridView1.Columns["Pass"].IsVisible = false;
}
GridViewTemplate childTemplate;
private GridViewTemplate CreateChildTemplate()
{
childTemplate = new GridViewTemplate();
this.radGridView1.Templates.Add(childTemplate);
GridViewTextBoxColumn column = new GridViewTextBoxColumn("wid");
childTemplate.Columns.Add(column);
column = new GridViewTextBoxColumn("name");
childTemplate.Columns.Add(column);
childTemplate.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
return childTemplate;
}
private void Form2_Load(object sender, EventArgs e)
{
GridViewTemplate childTemplate = CreateChildTemplate();
this.radGridView1.Templates.Add(childTemplate);
childTemplate.HierarchyDataProvider = new GridViewEventDataProvider(childTemplate);
}
private void radGridView1_RowSourceNeeded(object sender, GridViewRowSourceNeededEventArgs e)
{
foreach (GridViewRowInfo item in radGridView1.Rows)
{
var itll = item.Cells["id"].Value.ToString();
foreach (var itemWts in wts)
{
if (itll == itemWts.UserId.ToString())
{
GridViewRowInfo row = e.Template.Rows.NewRow();
row.Cells["wid"].Value = itemWts.WID.ToString();
row.Cells["name"].Value = itemWts.Name.ToString();
//symbole
e.SourceCollection.Add(row);
}
}
}
}
}
public class UserWatchTblCls
{
[BsonId]
[BsonElement("_id")]
public ObjectId Id { get; set; }
[BsonElement("fbId")]
public string fbId { get; set; }
[BsonElement("Name")]
public string Name { get; set; }
[BsonElement("pass")]
public string Pass { get; set; }
[BsonElement("Watchtbl")]
public List<WatchTblCls> WatchTbls { get; set; }
}
public class WatchTblCls
{
[BsonElement("wid")]
public string WID { get; set; }
[BsonElement("name")]
public string Name { get; set; }
[BsonElement("Symboles")]
public List<SymboleCls> Symbols { get; set; }
}
public class SymboleCls
{
[BsonElement("Name")]
public string Name { get; set; }
}
}
这是否仍然相关? – ntohl
相关,意思是什么? – Juste3alfaz
在我看来,你现在有不同的“得到正确的结果”,我不知道这个问题是否已经得到解答/更新。 – ntohl