2013-11-25 5 views
0

언 바운드식이 잘못되었습니다. I 새로운 열 & 런타임에 제한없는 표현식을 만들었습니다. gridview에서 특정 셀 값 (GetRowCellValue)을 가져 와서 바인딩되지 않은 식 열을 새 값 (SetRowCellValue)으로 변경하려고합니다. 그러나 오류는 내 실수가 뭐지? 도와주세요.mscorlib.dll에서 'System.StackOverflowException'유형의 처리되지 않은 예외가 발생했습니다. 오류가 발생 했습니까?

이것은 내 코드입니다.

private void unbound2_Load(object sender, EventArgs e) 
    { 
     // TODO: This line of code loads data into the 'orionSystemDataSet.Test_Product' table. You can move, or remove it, as needed. 
     this.test_ProductTableAdapter.Fill(this.orionSystemDataSet.Test_Product); 
     // TODO: This line of code loads data into the 'orionSystemDataSet.Test_Gridview' table. You can move, or remove it, as needed. 
     this.test_GridviewTableAdapter.Fill(this.orionSystemDataSet.Test_Gridview); 


     var product = repositoryItemGridLookUpEdit1.View.Columns.AddField("Type"); 
     product.Visible = true; 


     //create unbound column in form load 
     unboundcreate(); 

    } 

    private void unboundcreate() 
    { 
     gridControl1.ForceInitialize(); 

     GridColumn unbColumn = gridView1.Columns.AddField("PriceQuantity"); 
     unbColumn.Caption = "PricQuan"; 
     unbColumn.VisibleIndex = gridView1.Columns.Count; 
     unbColumn.UnboundType = DevExpress.Data.UnboundColumnType.Decimal; 
     unbColumn.OptionsColumn.AllowEdit = false; 
     unbColumn.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Numeric; 
     unbColumn.DisplayFormat.FormatString = "c"; 
     unbColumn.AppearanceCell.BackColor = Color.LemonChiffon; 
     unbColumn.UnboundType = DevExpress.Data.UnboundColumnType.Decimal; 
     unbColumn.UnboundExpression = "[Quantity] * [Each]"; 

    } 

코드 값 & 설정 값을 얻기 위해

private void gridView1_CustomUnboundColumnData(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs e) 
    { 

      GridView view = sender as GridView; 


      if (e.Column.FieldName == "PriceQuantity" && e.IsGetData) 
      { 
       //e.Value = getTotalValue(view, e.ListSourceRowIndex); 
       calfun(); 
      } 
      else 
      { 
       // nothing 
      } 

    } 


    private void calfun() 
    { 
     if (gridView1.FocusedRowHandle >= 1) 
     { 

      string temp = "Discount"; 
      //string dis = TXE_Gettype.Text.ToString(); 
      object objec = gridView1.GetRowCellValue(gridView1.FocusedRowHandle, gridView1.Columns["Type"]); 
      string dis = objec.ToString(); 

      if (dis == temp) 
      { 
       object obj = gridView1.GetRowCellValue(gridView1.FocusedRowHandle - 1, gridView1.Columns["Each"]); 

       int aa = Convert.ToInt32(obj); 
       //textEdit1.Text = aa.ToString(); 

       object obj1 = gridView1.GetRowCellValue(gridView1.FocusedRowHandle, gridView1.Columns["Each"]); 

       int a = Convert.ToInt32(obj1); 
       int b = aa; 

       int c = a * b; 

       //textEdit2.Text = c.ToString(); 

       gridView1.SetRowCellValue(gridView1.FocusedRowHandle, gridView1.Columns["PriceQuantity"], c); 
      } 
     } 
     else 
     { 
      } 
    } 

도움말 제가 & 설정 값을 싶지하십시오

+1

내 생각은 내가 SetRowCellValue 그것을 gridView1_CustomUnboundColumnData을 수정하는 경우 gridView1_CustomUnboundColumnData' 이벤트가 –

+0

안녕하세요 옌스을 호출 할'원인 gridView1.SetRowCellValue''에 전화입니다는 "CustomUnboundColumnData 이벤트는 왼쪽 나타납니다 수 편과 같은 오류를 보여주고 있다는 것입니다 + = 또는 = + " – Srihari

+0

예 ofc : D hehe, 왜 그랬습니까? 대신에'gridView1 ...'을 사용하여'e' 변수가 대신 사용될 수 있는지보십시오. –

답변

2

당신의 스택 트레이스의 프레임의 마지막 몇 유용 될 수 ...도 이 모든 코드로 우리는 추측 할 수 있습니다.

하지만 JensKloster의 의견에 동의합니다. DevExpress 언 바운드 열은 언 바운드 열을 표시하도록 만들어졌습니다.

이벤트는이 값을 계산하도록하기위한 것입니다. 행에서 무언가를 바꿀 때마다 호출됩니다. 따라서 setvalue를 호출하면 메서드가 자체 호출을합니다. E가로 주어진 DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs이다 대신

gridView1.SetRowCellValue(gridView1.FocusedRowHandle, gridView1.Columns["PriceQuantity"], c); 

e.Value = c; 

(=> 스택 오버 플로우 예외)

e.Value = myValue 사용하여 값을 설정 당신의 사건의 논증.

편집 : 또한 gridView1.FocusedRowHandle을 사용할 때 e.RowHandle을 참조하고 있었나요? 이 이벤트가 호출 될 때 부여되는 사항을 보려면 this을 참조하십시오.

edit2 : 두 개의 열을 곱하고 싶다면 맞춤 메커니즘을 사용하는 이유는 무엇입니까? unbColumn.UnboundExpression = "[Quantity] * [Each]";이면 충분합니까?

+1

나는 완전히 동의한다 - 나는'unbColumn.UnboundExpression = "[Quantity] * [Each]'가 sifficient라고 생각한다. –

+0

안녕하세요 Jens & Olivier, 내 작업은 Gridview에서"이전 항목 할인 "을 얻는 것입니다. 이전 행의 셀 값과 현재 행의 셀 값을 얻었으므로'(FocusedRowHandle) '을 사용했습니다. 그런 다음 두 값을 곱하여 새로운 값을 얻고 싶습니다. 마지막으로 새로운 값은 Unbound'Column [PriceQuantity ]'. 이것은 바운드 열의'RepositoryLookupEdit'에서 '할인'을 선택할 때 모두 수행됩니다.RepositoryLookupEdit에서 'Discount'의 다른 항목을 선택하면'Unbound Expression [Quantity] * [Each]. '를 계산해야합니다. 내 작업을 완료하는 데 도움이됩니까? – Srihari

관련 문제