2010-12-21 3 views
0

사용자가 밸류리스트 또는 울트라 드롭 다운 중 "과일"을 추가 할 수있게하려면 어떤 이벤트를 처리해야합니까?Infragistics Ultragrid valueList/UltraDropDown

내가 항상 형식 예외 얻을 KVP이기 때문에

Dictionary<int,string> fruits = new Dictionary<int,string>(); 



private void FruitInit() 
    { 
    //Create some fruit   
    fruits.Add(-1,"apple"); 
      fruits.Add(-2,"banana"); 

      //Create and add to the ultraDropDown 
      UltraDropDown fruitUltraDropDown = new UltraDropDown(); 
      fruitUltraDropDown.DataSource = fruits.ToList(); 
      fruitUltraDropDown.DisplayMember = "Value"; 
      fruitUltraDropDown.ValueMember = "Key"; 
      MyUltraGrid.DisplayLayout.Bands[0].Columns["MyColumn"].ValueList = fruitUltraDropDown; 
     } 
나는 사용자 유형은 "포도"나는 내 자신의 키를 사전에 추가 할 수 있습니다, 그것은 추가됩니다 때 그렇게 처리 할 수있는 이벤트

드롭 다운 목록. 내가 셀에 "포도를 입력 현재, 난 그냥 형식의 예외가.

감사

_Eric이

+0

매우 혼란스러운 질문입니다. 'UltraWinGrid'와'UltraDropDown'은 서로 관련없는 컨트롤입니다. 무슨 "세포"에 대해 이야기하고 있습니까? 'ValueList'를 생성 한 후에 그것을 버리면 'Dictionary'에 아무 것도 추가 할 수 없습니다. 또한 오류를 게시하십시오. –

+0

@Dour 감사합니다. 혼란스러운 것이 확실하지 않습니다. 내 ultragrid에서 "MyColumn"ultraDropDown 추가했습니다. 이것은 잘 작동하고, 사용자는 "apple"을 선택할 수 있습니다. || "바나나". 사용자가 자신의 값, 즉 "포도"를 입력 할 수 있어야하지만, 그렇게하면 형식이 예외로 표시되어 int32로 변환 할 수 없다는 예상치가 발생합니다. 이는 valueMember가 int이기 때문입니다. 처리 할 이벤트를 찾고 있는데 사전에 다시 추가하고 목록을 리 바인드 할 수 있습니다. 일반적으로 바인딩 소스를 사용하면 AddNew를 처리하고 사용자가 정의한 텍스트 (-3, "grape")와 함께 내 자신의 인덱스를 추가합니다.이 예제에서는 모두 – Eric

답변

2

마이크 @의 Infragistics의에서 응답을 얻었다, 나는 ValueListResolved

에 대한

몰랐어요 Answer from Mike

이벤트의 숫자는 사용. 아마 BeforeCellUpdate 또는을 사용 할 수 있습니다 어쩌면 BeforeExitEditMode.

하나의 방법은, 당신이 할 것하면 목록에 일치하는 항목을 찾을 ValueList를 얻기 위해 셀 ValueListResolved 속성을 사용하고 다음 하려고 할을 getValue 방법을 사용할 수 있습니다. cell.EditorResolved.Text를 사용하여 셀의 현재 편집 텍스트를 에 입력하십시오.

0

귀하의 질문과 관련이있을 수도 있고 아닐 수도 있지만 귀하의 코드에는 이상한 점이 많습니다.

UltraDropDown fruitUltraDropDown = new UltraDropDown(); 

Infragistics에는 designer.cs 파일의 컨트롤을 만들고 채우고 표시하는 마법사가 포함되어 있습니다. 이와 같은 컨트롤을 인스턴스화하면 모든 디자이너 데이터가 삭제되고 새로운 기본 컨트롤이 만들어집니다. 너 정말 이걸 의도하니? 이것은 designer.cs 파일에서 발췌 한 것입니까?

fruitUltraDropDown.DataSource = fruits.ToList(); 

이 당신의 Dictionary에서 새 List<KeyValuePair<int, string>>을 만듭니다. fruits에 도달 할 수 없으며 가비지 수집 대상이됩니다.이 변경 사항은 fruitUltraDropDown으로 전파되지 않습니다. 왜 그것을 던지기 위해서 fruits을 만듭니 까?

무엇 이벤트 내가 그렇게 처리 할 때 사용자 유형 "포도"...

유형? fruitUltraDropDown? 디자이너 데이터가 삭제되어 많은 코드가 표시되지 않는 한 fruitUltraDropDown은 편집 할 수 없습니다. MyUltraGrid? 이 코드를 표시하지 않으므로 아무도 구현 방법을 알 수 없습니다. 텍스트 필드? 프로그래밍 데이터? 총 신비. 더 이상 사용하지 않기 때문에 Dictionary

내가 사전에 추가 할 수 있습니다 ... 아무것도 추가

은 무의미하다.

var ds = ultraDropDown1.DataSource as List<KeyValuePair<int, string>>; 
ds.Add(new KeyValuePair<int,string>(-3, "grape")); 

이 그냥 백업 저장소에 항목을 추가 할 것입니다 : 당신이 ultraDropDown1.DataSource에 추가하려는 경우 당신은 KeyValuePair<int, string>을 추가해야합니다. 당신이 ultraDropDown1에 포함하려면 다음이 도움이되지 않으면

ultraDropDown1.DataBind(); 

을 소스 코드없이 누군가가 당신이 뭘 하려는지 이해할 수 있도록 당신은 당신의 질문에 충분한 정보를 추가해야합니다.

+0

인데, FruitInit을 표시하도록 코드를 편집했습니다. 그게 더 명확 해집니다. AfterCellUpdate는 필자가 필요로하는 이벤트였습니다. 사용자 항목이 목록에 있는지 확인하고 사전에 추가하지 않고 dropDown을 사용하여 다른 행을 업데이트합니다. – Eric

1

값 목록에 "UltraDropDown"을 사용하면 "BeforeDropDown"이벤트를 처리 할 수 ​​있습니다. 그리드의 "used"값을 UltraDropDown의 값과 비교 한 다음 사용중인 값을 숨 깁니다. 나를 위해 일했습니다.

private void BindApprovalsTab() 
    { 
     uddApproverList.BeforeDropDown -= new CancelEventHandler(uddApproverList_BeforeDropDown); 
     uddApproverList.DataSource = dsFindingDetails.Tables["Approvers"]; 
     uddApproverList.DisplayMember = "fldDisplayName"; 
     uddApproverList.ValueMember = "fldRoleGID"; 
     uddApproverList.Width = 150; 
     uddApproverList.DisplayLayout.Bands[0].Columns["fldRoleGID"].Hidden = true; 
     uddApproverList.DisplayLayout.Bands[0].Columns["fldDisplayName"].Header.Caption = "Role"; 
     uddApproverList.DisplayLayout.Bands[0].Columns["fldDisplayName"].Width = uddApproverList.Width; 
     uddApproverList.BeforeDropDown += new CancelEventHandler(uddApproverList_BeforeDropDown); 

     ugActionItemApprovals.DataSource = dsFindingDetails.Tables["tblIssueApprovals"]; 

    } 

    void uddApproverList_BeforeDropDown(object sender, CancelEventArgs e) 
    { 
     //assume all rows show 
     foreach (UltraGridRow udr in uddApproverList.Rows) 
     { 
      udr.Hidden = false; 
     } 
     //can we remove already used entries? 
     foreach (UltraGridRow udr in uddApproverList.Rows) 
     { 
      string sDDRoleGID = udr.Cells["fldRoleGID"].Value.ToString(); 
      foreach (UltraGridRow ur in ugActionItemApprovals.Rows) 
      { 
       if (ur.Cells["fldApprovalRequiredBy"].Value.ToString() == sDDRoleGID) 
       { 
        udr.Hidden = true; 
        break; 
       } 
      } 
     } 
    }