我试图获得聚焦行的单元格值和前一行单元格值。我用过这段代码
object eachprice = gridView1.GetRowCellValue(gridView1.FocusedRowHandle,gridView1.Columns["Price"]);
此代码获取焦点行中的价格值
object eachprice = gridView1.GetRowCellValue(gridView1.FocusedRowHandle-1, gridView1.Columns["Price"]);
但此代码未获取上一行的单元格值。它显示空值,所以我得到错误“对象引用未设置为对象的实例”
这是我的代码
private void discountcol()
{
if ((getdisc == tempstr) && (rownumber >= 1))
{
int focusedcount = gridView1.FocusedRowHandle;
t1.Text = "";
t1.Text = getdisc;
object eachprice = gridView1.GetRowCellValue(focusedcount-1, gridView1.Columns["Price"]);
t2.Text = eachprice.ToString();
if (!(t2.Text == string.Empty))
{
decimal pricedecimal = Convert.ToDecimal(t2.Text);
object eachdiscount = gridView1.GetRowCellValue(gridView1.FocusedRowHandle, gridView1.Columns["Price"]);
decimal eachdisdecimal = Convert.ToDecimal(eachdiscount);
decimal tempdiscountprice = -(pricedecimal * (eachdisdecimal / 100)); // -ve calculation
t3.Text = tempdiscountprice.ToString("N2");
gridView1.SetRowCellValue(gridView1.FocusedRowHandle, gridView1.Columns["Price"], t3.Text);
if (getdisc == tempstr)
{
PricQuan.UnboundType = DevExpress.Data.UnboundColumnType.Decimal;
PricQuan.UnboundExpression = " 1 * [Price]";
TaxinAmount.UnboundType = DevExpress.Data.UnboundColumnType.Decimal;
TaxinAmount.UnboundExpression = " ([Price] * ([TaxInPercentage] / 100.0)) * 1 ";
}
else
{
//PricQuan.UnboundType = DevExpress.Data.UnboundColumnType.Decimal;
//PricQuan.UnboundExpression = " Round([Quantity] * [Price], 2)";
//TaxinAmount.UnboundType = DevExpress.Data.UnboundColumnType.Decimal;
//TaxinAmount.UnboundExpression = " ([Price] * ([TaxInPercentage] / 100.0)) * [Quantity] ";
}
}
}
else
{
}
}
答案 0 :(得分:1)
您应该使用focusedrowchangedevent来获取上一个rowhandle。 How to get gridview cell value in RepositoryItemGridLookupEdit_ValueChanged Event and set in TextEdit?
事实上,这一行正在运作:object eachprice = gridView1.GetRowCellValue(focusedcount, gridView1.Columns["Price"]);
但是为什么你不使用数据源的魔力;)我会给你一个小例子:
让我们说我们有一个产品,它有一个标题和价格。所以我们需要一个产品类。
public class Product
{
public string Title{get;set;}
public decimal Price{get;set;}
}
现在我们有一个应该在网格中显示的Productlist。所以我们创建一个IList并将其绑定到网格。
public partial class MyForm : XtraForm
{
public MyForm()
{
InitializeComponent();
}
private List<Product> MyList()
{
List<Product> myList = new List<Product>();
//Add all your Products
}
private void LoadGrid()
{
MyGrid.DataSource = MyList();
}
}
现在,Gridview只显示列表中的数据。它唯一的功能是显示数据。所有工作都可以使用数据源(列表)处理的数据。 如果你想获得focusrow的值,它的工作原理如下:
private void MyGridView_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
{
Product product = (Product)MyGridView.GetRow(e.FocusedRowHandle);
//Now you have your complete Object again! You dont need to ask every value with getrowcell value or sth.
//For example
MyTextEdit.Text = product.Price.toString();
}
它只是一个小而丑陋的例子来展示它是如何运作的。 在我看来,这是处理Grid工作的更美妙方式。它更容易处理。