2013-11-25 8 views
0

Ошибка получения Unbound Expression. I Создан новый столбец & Неограниченное выражение во время выполнения. Я получаю определенные значения ячейки (GetRowCellValue) из gridview и пытаюсь изменить этот столбец несвязанного выражения с новым значением (SetRowCellValue). Но ошибка показала, что моя ошибка? Помоги мне.Произошло необработанное исключение типа «System.StackOverflowException» в ошибке mscorlib.dll?

Это мой код.

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

Я думаю, что это ваш вызов 'gridView1.SetRowCellValue', что вызывает' gridView1_CustomUnboundColumnData' событие будет называться –

+0

Hi Jens, если я изменить SetRowCellValue к gridView1_CustomUnboundColumnData это показывает ошибку как «событие CustomUnboundColumnData может только кажется левой стороне of + = or = + " – Srihari

+0

yes ofc: D хе-хе, зачем вам это делать? вместо использования 'gridView1 ...' попробуйте и посмотрите, можно ли вместо этого использовать переменную 'e'. –

ответ

2

Последние пару кадров вашего StackTrace может быть полезно ... даже со всем этим кодом, мы можем только предполагать.

Но я согласен с комментарием JensKloster: несвязанные столбцы DevExpress создаются для отображения несвязанных столбцов (вычисляется, из других, затем).

Событие предназначено для расчета этого значения. Он вызывается каждый раз, когда вы что-то изменяете в своей строке. Таким образом, вызов setvalue из него вызовет метод для вызова его сам. (=> Переполнение стека исключений)

Используйте e.Value = myValue, чтобы установить значение:

e.Value = c; 

вместо

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

где е DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs данные как аргумент вашего события.

редактировать: Более того, я думаю, что при использовании gridView1.FocusedRowHandle, вы ссылаетесь на e.RowHandle? См. this, чтобы узнать, что вам дается при вызове этого события.

Редактировать2: Почему использование пользовательских механизмов, если вы просто хотите умножить два столбца? unbColumn.UnboundExpression = "[Quantity] * [Each]"; достаточно, не так ли?

+1

Я полностью согласен - я думаю, что 'unbColumn.UnboundExpression =" [Quantity] * [Every] 'is sifficient –

+0

Hi Jens & Olivier, Моя задача - получить« скидку на предыдущий элемент »в Gridview, поэтому мне нужно получить значение ячейки в предыдущей строке и получить значение ячейки в текущей строке, поэтому я использовал '(FocusedRowHandle)'. Затем я хочу умножить оба значения и получить новое значение. Наконец, это новое значение нужно сохранить в Unbound 'Column [PriceQuantity ] '. Все это делается, когда я выбираю« Скидка »в« RepositoryLookupEdit »в Связанном столбце.Если я выберу любой другой элемент из RepositoryLookupEdit, тогда «Discount» мне нужно вычислить 'Unbound Expression [Quantity] * [Every].' Помогите мне выполнить мою задачу? – Srihari

Смежные вопросы