プログラムでAspXGridViewのEditItemTemplate内のAspxControlに到達する方法

非常にシンプルで私は自分自身を馬鹿に感じる:(

私は新たにDevX Controlsを使い始めました。そのドキュメントとサンプルプロジェクトはSUCKSです!

私の問題は次のとおりです。

私は自分のaspxページにASPxGridViewを持っています:




    
        
        
            
            
        
    
    
        
        
            
            
        
    

ASPX.CSファイルのdxdateMyField1またはdxcomboMyfield2にはどうすれば到達できますか?私は書きたい:

dxcomboMyField2.DataSource = GetMyData2List();
dxcomboMyField2.SelectedItemIndex = 0;
... etc.

どうもありがとう。

3
追加された 著者 Wouter de Kort,
@DortGen:なぜあなたはこれらのリソースを嫌うのですか?これについてDXの人に連絡しようとしたことがありますか?
追加された 著者 Mikhail,
@DortGen、テンプレートからのコントロールは、テンプレートが後でポイントされ、複数のインスタンス(リピータのアイテムテンプレートなど)が存在する可能性があるため、簡単にアクセスできません。テンプレートの作成について確信がある場合(たとえば、この編集行の作成時に)関連するコンテナで FindControl メソッドを使用する方法があります。それにかかわらず、Wouter de Kortのリンクを確認してください - 使用されるイベントとコントロールを見つけるために使用されるメソッドをリストします。
追加された 著者 VinayC,
ありがとうございます、私はそれに取り組んでいます。
追加された 著者 DortGen,

2 答え

EditItemTemplateコントロールに直接アクセスすることはできません。 HtmlRowCreatedイベントで次のようにアクセスできます。

if (e.RowType != GridViewRowType.InlineEdit) return;
    ASPxTextBox txtBox = ASPxGridView1.FindEditRowCellTemplateControl(ASPxGridView1.Columns["Name"]
            as GridViewDataColumn, "ASPxTextBox1") as ASPxTextBox;

テンプレートに含まれているアクセスコントロールに関するドキュメントを確認してください

ASPxLabel.NamingContainerプロパティをGridViewEditItemTemplateContainerにキャストし、GridViewEditItemTemplateContainer.Textプロパティを使用して列値を取得することは可能です。

しかし、Init/Loadイベントハンドラを使用する技法が気に入っています。グリッドが編集モードに切り替わると、ASPxLabel.Loadイベントが発生します。この記事をチェックする Init/Loadイベントハンドラを使用する一般的な手法実装の助け。

[ASPx]




[C#]

ASPxTextBox txtName;    

protected void txtName_Init(object sender, EventArgs e)    
{    
    txtName = (ASPxTextBox)sender;

    GridViewEditFormTemplateContainer container = txtName.NamingContainer as GridViewEditFormTemplateContainer;
// You can remove the if statement, and try to insert a new record. You'll catch an exception, because the DataBinder returns null reference

    if (!container.Grid.IsNewRowEditing)

        txtName.Text = DataBinder.Eval(container.DataItem, "CategoryName").ToString();    
} 

イベントの更新:

protected void grid_RowUpdating(object sender, DevExpress.Web.Data.ASPxDataUpdatingEventArgs e)
{
    e.NewValues["CategoryName"] = txtName.Text;
} 

既に質問があります - ASPxGridView - EditItemTemplate内のコントロールを見つける方法 DevExpress fourmで。

3
追加された
あなたは一般的なテクニックのinit/loadページを見たことがあります。コンボボックスの例があります。これらの例を確認してください。example2 ..例外を送出する場合は、テンプレートを編集してdropdownlistを追加し、そのデータを HTMLRowCreated イベント。
追加された 著者 Niranjan Kala,
こんにちはMr Niranjan、私はあなたのスニペットを使用しようとしています。私はAspXDropDownコントロールを使用していますが、サンプルコードはASPxTextBoxコントロールであり、編集モードではうまくいきます。しかし、Updateボタンをクリックすると、混乱します。デバッガは、DropDownのOnInitメソッドに再び入り、RowUpdating(または私の場合はRowInserting)メソッドでASPxDataUpdatingEventArgsのNewValuesコレクションにEditTemplateコントロールがありません:( OnInitメソッドにはDropDownの独自の情報はありません。もう一度NULLを返します。私のミスは何ですか?
追加された 著者 DortGen,

コンボデータソースの設定には、コンボボックスのinit/loadイベントハンドラを使用できます。それがあなたのために働かない場合は、FindEditRowCellTemplateControlを使用してください(コメントのリンクを使用して詳しい説明を参照してください)。

1
追加された