GridView를 마스터/세부 모드로 사용하여 MongoDb 서버에서 데이터를 가져 오려고했습니다.잘못된 결과가있는 행을 반복하십시오.
그림이 보여 주듯이 사용자 컬렉션에서 ID와 이름을 얻은 다음 부모 행을 반복하여 ID를 가져오고 두 번째 제품 컬렉션에서 각 사용자의 세부 정보를 가져옵니다.
서버에서 첫 번째 사용자는 1 개의 제품 만 있지만 그림에서는 2 개의 테이블로 3 번 보여줍니다.
그래서 올바른 결과를 얻을하는 방법 및 마스터/세부 정보의 GridViewnamespace 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