C# 在获取行中的单元格值时,我获取的错误对象引用未设置为对象的实例
我正在尝试获取聚焦行的聚焦行单元格值和聚焦行的上一行单元格值。我用了这个密码C# 在获取行中的单元格值时,我获取的错误对象引用未设置为对象的实例,c#,winforms,gridview,devexpress,C#,Winforms,Gridview,Devexpress,我正在尝试获取聚焦行的聚焦行单元格值和聚焦行的上一行单元格值。我用了这个密码 objecteachprice=gridView1.GetRowCellValue(gridView1.FocusedRowHandle,gridView1.Columns[“Price”]) 这段代码将获取重点行中的price值 object eachprice = gridView1.GetRowCellValue(gridView1.FocusedRowHandle-1, gridView1.Columns["P
objecteachprice=gridView1.GetRowCellValue(gridView1.FocusedRowHandle,gridView1.Columns[“Price”])代码>
这段代码将获取重点行中的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
{
}
}
您应该使用focusedrowchangedevent获取上一行句柄。
事实上,这行代码起作用了:objecteachprice=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();
}
}
这只是一个小而丑陋的例子来说明它是如何工作的。
在我看来,这是处理网格工作的更漂亮的方法。而且它更容易处理
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();
}