2つの列を持つグリッドがあり、最初の列にはlookupeditがあります。グリッドとlookupeditsを埋めることはできますが、データベースに従って選択したテキストを設定する方法がわからないという問題がありますか?
これがグリッドとlookupeditを埋める方法です
private void fill_budget_settings(){
fill_tanim_lookupedit();
gc.DataSource = dataContext.getObjectList("RN_BUDGET_SETTINGS", "*", 0, "", "", 0, 0);
gv.BestFitColumns();
}
private void fill_tanim_lookupedit()
{
int cnt = gv.DataRowCount;
lookUpEditTanim = new RepositoryItemLookUpEdit();
lookUpEditTanim.DataSource = dataContext.getObjectList("RN_BUDGET_SETTINGS_VARIABLES", "*", 0, "", "", 0, 0);
lookUpEditTanim.ValueMember = "VARIABLE";
lookUpEditTanim.DisplayMember = "VARIABLE";
gv.Columns[0].ColumnEdit = lookUpEditTanim;
}
フォームが読み込まれると、グリッドが入力され、lookupeditsが入力されますが、データベースに従って必要なデータでlookupeditsが選択されません。どうやってやるの?
セル値に従ってエディター値を表示する場合は、ValueMember
プロパティに指定された列に、現在セルにある値が含まれている必要があります。
例:
指定されたスクリーンショットでは、Tanm列に変数IDがあり、列に変数名を表示する場合、ValueMember
フィールドはIDであり、であるDisplayMember
必要がありますVariable
。
コードスニペットの例:
LookUpEdit ledMyControl;
RepositoryItemLookUpEdit _myRepositoryLookup;
RepositoryItemButtonEdit rbtnEdit;
GridControl grid;
GridView view;
GridView detailView;
GridLevelNode detailNode;
List<Category> categories = new List<Category>();
public GridRepositoryItemTest()
{
InitializeComponent();
CreateLookupEdit();
InitializeGrid();
SetRepositoryLoopEdit();
InitializeAndAddColumnsToViews();
InitializeAndBindDataSource();
detailView.Columns["Category"].ColumnEdit = _myRepositoryLookup;
}
private void CreateLookupEdit()
{
ledMyControl = new LookUpEdit();
ledMyControl.Properties.Columns.Add(new DevExpress.XtraEditors.Controls.LookUpColumnInfo("Key"));
ledMyControl.Properties.Columns.Add(new DevExpress.XtraEditors.Controls.LookUpColumnInfo("Value"));
this.Controls.Add(ledMyControl);
Dictionary<string, string> dic = new Dictionary<string, string>();
dic.Add("Test", "1");
dic.Add("Test2", "2");
dic.Add("Test3", "3");
dic.Add("Test4", "4");
dic.Add("Test5", "5");
dic.Add("Test6", "6");
dic.Add("Test7", "7");
dic.Add("Test8", "8");
dic.Add("Test9", "9");
dic.Add("Test10", "10"); ledMyControl.Properties.DisplayMember = "Value";
ledMyControl.Properties.ValueMember = "Key";
ledMyControl.Properties.DataSource = dic.ToList();
ledMyControl.Properties.Columns[0].Visible = false;
}
private void InitializeGrid()
{
grid = new GridControl();
view = new GridView(grid);
detailView = new GridView(grid);
detailNode = grid.LevelTree.Nodes.Add("Books", detailView);
grid.Dock = DockStyle.Fill;
this.Controls.Add(grid);
detailView.ValidateRow += new DevExpress.XtraGrid.Views.Base.ValidateRowEventHandler(detailView_ValidateRow);
}
void detailView_ValidateRow(object sender, DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e)
{
MessageBox.Show("It's working");
}
private void InitializeAndAddColumnsToViews()
{
if (view != null && detailView != null)
{
view.Columns.AddField("CategoryID").VisibleIndex = 0;
detailView.Columns.AddField("ID").VisibleIndex = 0;
detailView.Columns.AddField("Name").VisibleIndex = 1;
detailView.Columns.AddField("Category").VisibleIndex = 2;
}
}
private void InitializeAndBindDataSource()
{
CreateCategories();
BindingList<BookDetail> bookDetails = new BindingList<BookDetail>();
BookDetail bookDetail = null;
for (int j = 0; j < 5; j++)
{
bookDetail = new BookDetail { CategoryID = categories[j].ID };
for (int i = 0; i < 5; i++)
{
bookDetail.Books.Add(new Book
{
ID = 1,
Name = "Book - " + (i + 1),
Category = categories[j].ID
});
}
bookDetails.Add(bookDetail);
}
grid.DataSource = bookDetails;
}
private void CreateCategories()
{
for (int i = 1; i <= 10; i++)
{
categories.Add(new Category
{
ID = i,
Name = "Category - " + i
});
}
}
private void SetRepositoryLoopEdit()
{
//rbtnEdit.Click += new EventHandler(rbtnEdit_Click);
//rbtnEdit.ButtonClick += new DevExpress.XtraEditors.Controls.ButtonPressedEventHandler(rbtnEdit_ButtonClick);
_myRepositoryLookup = new RepositoryItemLookUpEdit();
_myRepositoryLookup.Name = "redCategories";
_myRepositoryLookup.DataSource = categories;
_myRepositoryLookup.ValueMember = "ID";
_myRepositoryLookup.DisplayMember = "Name";
grid.RepositoryItems.Add(_myRepositoryLookup);
_myRepositoryLookup.EditValueChanged += new EventHandler(_myRepositoryLookup_EditValueChanged);
}
void rbtnEdit_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
{
throw new NotImplementedException();
}
void rbtnEdit_Click(object sender, EventArgs e)
{
throw new NotImplementedException();
}
void _myRepositoryLookup_EditValueChanged(object sender, EventArgs e)
{
//your code here
}
上記のように実行しておらず、列セルに従って値を取得したい場合。次に、インプレースエディタの概要See Also
を取得し、ページのセクションを確認する必要があります。そこに、個々のセルへのエディタの割り当てが1つ表示されます。
例:
using DevExpress.XtraGrid.Views.Grid;
private void gridView1_CustomRowCellEdit(object sender, CustomRowCellEditEventArgs e) {
if (e.Column.FieldName == "FieldName") return;
GridView gv = sender as GridView;
string fieldName = gv.GetRowCellValue(e.RowHandle, gv.Columns["FieldName"]).ToString();
switch (fieldName) {
case "Population":
e.RepositoryItem = repositoryItemSpinEdit1;
break;
case "Country":
e.RepositoryItem = repositoryItemComboBox1;
break;
case "Capital":
e.RepositoryItem = repositoryItemCheckEdit1;
break;
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加