2011-06-13 3 views
0

메신저에 프로젝트 용 Devexpress ASPxGridView를 사용하지만 사용자 정의 EditForm에 데이터를 채우는 데 문제가 있습니다.코드에서 ASPxTextBox 및 ASPxListBox를 채우기

<Templates> 
    <EditForm> 
     Company Name: 
     <dx:ASPxTextBox ID="CompanyName" runat="server" Value="<% #Bind('CompanyName') %>" /> 
     Parent: 
     <dx:ASPxListBox ID="ParentGuid" runat="server" Value="<% #Bind('ParentGuid') %>" /> 
    </EditForm> 
</Templates> 

은 일반적으로 내가

protected void ASPxGridView1_StartRowEditing(object sender, DevExpress.Web.Data.ASPxStartRowEditingEventArgs e) 
{ 
    var CompanyList = db.companies.OrderBy(x => x.CompanyName).ToList(); 
    ASPxListBox ParentGuid = (ASPxListBox)ASPxGridView1.FindControl("ParentGuid"); 
    ParentGuid.DataSource = CompanyList; 
    ParentGuid.DataBind(); 

    ASPxTextBox CompanyName = (ASPxTextBox)ASPxGridView1.FindControl("CompanyName"); 
    CompanyName.Text = "Some company name"; 
} 

하지만 늘 작업 같은 것을 써서 다음과 같이

는 것 같습니다. 어떤 조언을 시작해야할까요? 설명서에 잘 나와있는 사용자 지정 양식은 실제로 다루지 않습니다./

고마워요!

== UPDATE ==있어서

protected void ASPxGridView1_HtmlEditFormCreated(object sender, ASPxGridViewEditFormEventArgs e) 
{ 
    Control CompanyName = ASPxGridView1.FindEditFormTemplateControl("CompanyName"); 
    if (CompanyName != null) 
    { 
     ASPxTextBox CompanyNameEdit = CompanyName as ASPxTextBox; 
     CompanyName.Text = "Some Co"; 
    } 

} 

I는 값 = "<% #Bind 사용 사실 ('회사 명을')와 onhtmleditformcreated ="ASPxGridView1_HtmlEditFormCreated "를 사용하여 시도

%> "조금 뒤죽박죽입니다. Bind를 제거하면 상자에 데이터가 채워지지만 데이터를 가져올 방법이 없습니다. 이 주변의 어떤 방법?

편집자 속성을 설정 HtmlEditFormCreated 이벤트를 사용

답변

1

대답은 ...

ASPxComboBox 채우기는 CompanyList

protected void ASPxGridView1_HtmlEditFormCreated(object sender, ASPxGridViewEditFormEventArgs e) 
{ 
    Control ParentGuidControl = ASPxGridView1.FindEditFormTemplateControl("ParentGuid"); 
    if (ParentGuidControl != null) 
    { 
     ASPxComboBox ParentGuid = (ASPxComboBox)ParentGuidControl; 

     var CompanyList = db.companies.OrderBy(x => x.CompanyName); 
     ParentGuid.TextField = "CompanyName"; 
     ParentGuid.ValueField = "CompanyGuid"; 
     ParentGuid.DataSource = CompanyList; 
     ParentGuid.DataBind(); 
    } 
} 

라고하지만! 당신은 내가

<Templates> 
    <EditForm> 
     Company Name: 
     <dx:ASPxTextBox ID="CompanyName" runat="server" Value="<% #Bind('CompanyName') %>" /> 
     Parent: 
     <dx:ASPxComboBox ID="ParentGuid" runat="server" Value="<% #Bind('ParentGuid') %>" /> 
    </EditForm> 
</Templates> 

당신이 늘 코드 숨김에서 그것을 채울 수 있었다 같은 사용자 지정 양식이있는 경우

의 #bind 방법은 방법이고, 다른 입력 값을 덮어 씁니다. 그러나 여기 뒤에 코드에서 그들을 채울 계획하지 않으면 것은 ...

protected void ASPxGridView1_RowInserting(object sender, DevExpress.Web.Data.ASPxDataInsertingEventArgs e) 
{ 
    IDictionaryEnumerator enumerator = e.NewValues.GetEnumerator(); 

    string CompanyName = string.Empty; 
    Guid ParentGuid = Guid.Empty; 

    enumerator.Reset(); 
    while (enumerator.MoveNext()) 
     if (enumerator.Key.ToString() == "CompanyName") 
      CompanyName = enumerator.Value.ToString(); 
     else if (enumerator.Key.ToString() == "ParentGuid") 
      ParentGuid = new Guid(enumerator.Value.ToString()); 

    // Do insert trick here 

} 

데이터를 가져 오기 위해 깔끔한 트릭하지만 코드 숨김에서 양식 값의 일부를 입력 할 경우에는가 없도록 #bind EditForm

<Templates> 
    <EditForm> 
     Company Name: 
     <dx:ASPxTextBox ID="CompanyName" runat="server" /> 
     Parent: 
     <dx:ASPxComboBox ID="ParentGuid" runat="server" /> 
    </EditForm> 
</Templates> 

채우기의 방법은이 게시물의 상단에 설명이

protected void ASPxGridView1_RowInserting(object sender, DevExpress.Web.Data.ASPxDataInsertingEventArgs e) 
{ 
    string CompanyName = string.Empty; 
    Guid ParentGuid = Guid.Empty; 

    // This method is a bit more secure 
    Control CompanyNameControl = ASPxGridView1.FindEditFormTemplateControl("CompanyName"); 
    if (CompanyNameControl != null) 
    { 
     ASPxTextBox CompanyNameTb = (ASPxTextBox)CompanyNameControl; 
     CompanyName = CompanyNameTb.Text.ToString(); 
    } 

    // A bit less secure, but lesser code 
    ASPxComboBox ParentGuidControl = (ASPxComboBox)ASPxGridView1.FindEditFormTemplateControl("ParentGuid"); 
    ParentGuid = new Guid(ParentGuidControl.SelectedItem.Value.ToString()); 

    // Do insert... 

} 

같은 값을 가져 오는 재미

을 가지고
1

당신은 약간 다른 접근 방식을 사용해야합니다. 에디터 인스턴스를 얻으려면 gridView의 FindEditFormTemplateControl 메소드를 사용하십시오.

+0

운이 없다는 것을 발견했지만 위의 스 니펫을 업데이트했습니다. –

+0

수정, 그게 효과가 있지만 사실은 내가 사용하는 사실 = "<% #Bind ('CompanyName') %>"조금 뒤죽박죽. 이 주변의 어떤 방법? –

+0

바인딩 표현식을 사용하는 경우 편집기의 값을 직접 설정할 필요가 없습니다. 자동으로 설정해야합니다. 다음은이 기능의 예입니다. http : //demos.devexpress.com/ASPxGridViewDemos/GridEditing/TwoWayBinding.aspx –

관련 문제