以下を処理するカスタム GridViewTextBoxColumn を作成しました。
1) EditMode (問題領域) でない場合は、通常の TextboxColumn として表示します。1) Edit Mode では、オートコンプリートをセルに追加して、ユーザーにアイテムのリストを求めるプロンプトを表示します。2) 左に配置した楕円形のボタンをクリックするにはブラウズするテキストボックス (Open's a Form with a Grid of Items with more columns)
私はすべて問題なく追加しました。セルでもBeginEditにAutoComplteソースを動的に追加できます(または、AutoCompleteTextBoxCellElementのCreateChildElementsメソッドに追加できます)
したがって、何が起こるかは次のとおりです。
私のクラスはこれです:
public class AutoCompleteTextBoxCell : GridDataCellElement
{
public AutoCompleteTextBoxCell(GridViewColumn column, GridRowElement row)
: base(column, row)
{
}
}
次に、このメソッドを追加して要素 textbox を追加します
protected override void CreateChildElements()
{
txtStockCode = new RadTextBoxElement();
this.Children.Add(txtStockCode);
LoadData("Code"); //Adding Auto Complete in this event
}
これも追加して、セル内の要素を配置できるようにします。
protected override SizeF ArrangeOverride(SizeF finalSize)
{
RectangleF rect = GetClientRectangle(finalSize);
RectangleF rectEdit = new RectangleF(rect.X, rect.Y, rect.Width - (32 + 1), rect.Height);
RectangleF rectButton = new RectangleF(rectEdit.Right + 1, rectEdit.Y, 32, rect.Height);
if (this.Children.Count >= 2)
{
this.Children[0].Arrange(rectEdit);
this.Children[1].Arrange(rectButton);
}
else
{
rectEdit = new RectangleF(rect.X, rect.Y, rect.Width, rect.Height);
this.Children[0].Arrange(rectEdit);
}
return finalSize;
}
その後、グリッドに戻り、次のことを行います。
enter code here
private void grdMain_CellBeginEdit(object sender, GridViewCellCancelEventArgs e) { if (e.Column.Name == "colItem") {
RadButtonElement btnMore = new RadButtonElement();
btnMore.Text = "...";
btnMore.Click += new EventHandler(btnMore_Click);
grdMain.CurrentCell.Children.Add(btnMore);
}
}
これによりボタンが追加され、セルの編集モードで参照フォームを起動できるようになります。
EndEdit イベントで、ボタンを削除します。
private void grdMain_CellEndEdit(object sender, GridViewCellEventArgs e)
{
if (e.Column.Name == "colStock")
{
if (this.grdMain.CurrentCell.Children.Count <= 2) //This might be 1 or 2
{
if (grdMain.CurrentCell.Children.Count == 2) // If its two, I need to remove the button
{
if (grdMain.CurrentCell.Children[1] is RadButtonElement)
{
this.grdMain.CurrentCell.Children.RemoveAt(1);
}
//If one, I do nothing for the moment. -- I think.
}
}
}
}
1 つの問題についてはすべて問題ありません。
セルが追加されると、(私の継承により) 通常のテキストボックス列のように動作するように戻ると思いますが、そうではありません。テキストは非表示になっています。
セルをクリックして編集モードにすると、入力したテキストが表示されます。
これは私が達成しようとしていることの問題だと思います。一連の出来事の問題だと思います。
セルが編集モードでないときにテキストが表示されない理由を教えてください。
よろしくジョン