C# Datagridview当前行或selectedrow
您好,我有两个DataRidView,我希望C# Datagridview当前行或selectedrow,c#,winforms,datagridview,C#,Winforms,Datagridview,您好,我有两个DataRidView,我希望datagridview1的第一行是当前行或选定行,因此当我单击“添加到购物车”按钮时,我不必单击第一行,它将转到datagridview2。 但我似乎做不到。它还进入验证,说请先选择产品dgv1。行[0]。所选=真不工作 我可以通过先单击一行,然后单击“添加到购物车”按钮来手动执行此操作,它将转到datagridview2。但我想自动完成。 为了让您了解我正在尝试做的是条形码扫描,当您扫描条形码时,它将显示在datagridview1中,并自动转到
datagridview1的
第一行是当前行或选定行,因此当我单击“添加到购物车”按钮时,我不必单击第一行,它将转到datagridview2。
但我似乎做不到。它还进入验证,说请先选择产品<代码>dgv1。行[0]。所选=真代码>不工作
我可以通过先单击一行,然后单击“添加到购物车”按钮来手动执行此操作,它将转到datagridview2
。但我想自动完成。
为了让您了解我正在尝试做的是条形码扫描,当您扫描条形码时,它将显示在datagridview1中,并自动转到datagridview2
简而言之,我只需要以编程方式选择datagridview1的第一行作为代码工作的“当前行”或“选定行”。
您可以将其设置为,我希望以编程方式“单击”第一行
但如果你们想看的话,这是我的密码。
这是我的条形码textbox textchanged事件代码:
private void txtBarcodeSearch_TextChanged(object sender, EventArgs e)
{
if (txtBarcodeSearch.Text != "" && txtBarcodeSearch.Text.Length == 13)
{
crud.FillDataGrid("Select ProductID,BrandName,GenericName,Form,Dosage,Quantity,SellingPrice,D,VE from Products where (Status = 'Active' and Quantity > 0) and Barcode Like '%" + txtBarcodeSearch.Text + "%' ", ref dgvPOSproduct);
dgvPOSproduct.Rows[0].Selected = true;
clicktry();
dgvPOSproduct.Columns[0].HeaderText = "ProductID";
dgvPOSproduct.Columns[1].HeaderText = "Brand";
dgvPOSproduct.Columns[2].HeaderText = "Generic";
dgvPOSproduct.Columns[3].HeaderText = "Form";
dgvPOSproduct.Columns[4].HeaderText = "Dosage";
dgvPOSproduct.Columns[5].HeaderText = "Qty";
dgvPOSproduct.Columns[6].HeaderText = "Price";
dgvPOSproduct.Columns[7].HeaderText = "D";
dgvPOSproduct.Columns[8].HeaderText = "VE";
dgvPOSproduct.Columns[0].Width = 65;
dgvPOSproduct.Columns[1].Width = 80;
dgvPOSproduct.Columns[2].Width = 80;
dgvPOSproduct.Columns[3].Width = 58;
dgvPOSproduct.Columns[4].Width = 58;
dgvPOSproduct.Columns[5].Width = 45;
dgvPOSproduct.Columns[6].Width = 55;
dgvPOSproduct.Columns[7].Width = 35;
dgvPOSproduct.Columns[8].Width = 35;
if (dgvPOSproduct.Rows.Count == 1)
{
dgvPOSproduct.Rows[0].Selected = true;
clicktry();
}
}
else
{
dgvProductSettings();
}
}
这是clicktry方法代码:-
private void clicktry()
{
if (!validateProduct())
{
return;
}
else if (!QtyDialog())
{
return;
}
if (!notIncartyet())
{
return;
}
else
{
int str, qty;
str = Convert.ToInt32(storeqty.Text);
qty = Convert.ToInt32(quantity.Text);
temporaryquantity.Text = str.ToString();
if (str < qty || str == 0)
{
MessageBox.Show("Insufficient Stock", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
continuetocart();
}
}
}
currentrow的概念与选定的行之间存在差异,因为当前行是一个单一属性,只能引用一行,而selectedrow可以是一个集合。Currentrow是指单元格周围有点框/键盘焦点的行
我认为您应该调整程序的逻辑,这样它就可以查看当前行是否为空,而不是试图确保当前行始终有一个值。如果它为null,并且网格中只包含一行,则取该行。如果有多行,请要求用户单击他们想要的行currentrow的概念与选定的行之间存在差异,因为当前行是一个单一属性,只能引用一行,而selectedrow可以是一个集合。Currentrow是指单元格周围有点框/键盘焦点的行
我认为您应该调整程序的逻辑,这样它就可以查看当前行是否为空,而不是试图确保当前行始终有一个值。如果它为null,并且网格中只包含一行,则取该行。如果有多行,请用户单击他们想要的行,执行以下操作: //声明一个全局变量
int ? selectedRow = null;
public void LoadList()
{
// reset global variable
selectedRow = null;
List<string> collection = new List<string> { "Item 1" };
gridView.DataSource = collection ;
if (gridView.Rows.Count = 1)
{
selectedRow = 0;
}
}
这样做: //声明一个全局变量
int ? selectedRow = null;
public void LoadList()
{
// reset global variable
selectedRow = null;
List<string> collection = new List<string> { "Item 1" };
gridView.DataSource = collection ;
if (gridView.Rows.Count = 1)
{
selectedRow = 0;
}
}
虽然不能直接设置CurrentRow属性(它是只读的),但CurrentRow始终是当前单元格的行,可以进行设置。因此,在加载数据后,可以通过添加以下行来确保默认情况下第一行为当前行:
dgvPOSproduct.CurrentCell = dgvPOSproduct.Rows[0].Cells[0];
在尝试此操作之前,应检查行数是否大于0,否则将出现索引越界错误。尽管无法直接设置CurrentRow属性,(它是只读的),但CurrentRow始终是当前单元格的行,您可以进行设置。因此,在加载数据后,可以通过添加以下行来确保默认情况下第一行为当前行:
dgvPOSproduct.CurrentCell = dgvPOSproduct.Rows[0].Cells[0];
在尝试此操作之前,应检查行数是否大于0,否则将出现索引越界错误。validateProduct()是否显示此验证消息?是否在那里检查dgvPOSproduct.CurrentRow是否为null?crud.FillDataGrid()如何将数据加载到网格?谢谢,先生,我意识到我的验证是错误的。当我在datagridview中单击一个单元格时,它的ID被放在一个文本框中,我的validateProduct()只是检查该标签是否为null。如果产品尚未选定或当前已选定,则验证的正确方法是什么?先生,validateProduct()显示此验证消息?是否在那里检查dgvPOSproduct.CurrentRow是否为null?crud.FillDataGrid()如何将数据加载到网格?谢谢,先生,我意识到我的验证是错误的。当我在datagridview中单击一个单元格时,它的ID被放在一个文本框中,我的validateProduct()只是检查该标签是否为null。如果产品尚未选择或当前已选择sir,验证的正确方法是什么?它表示datagridview不包含DataBind和SelectedRow sir的定义。没有selectedindex,也没有gridviewrow,但有DataGridViewRow,我以为这是一个web应用程序。我已经更新了我的回复。我的坏:)是的,先生,我会的。我似乎仍然不能使它工作。它给了我一个“显示一条没有选择的消息”(我把它放在一个消息框中)。给我几分钟,先生。我想这是因为我的代码很乱。记住,返回的数据必须是一个,然后变量才会有值。它说datagridview不包含DataBind和SelectedRow的定义,先生。没有selectedindex,也没有gridviewrow,但有DataGridViewRow,我以为这是一个web应用程序。我已经更新了我的回复。我的坏:)是的,先生,我会的。我似乎仍然不能使它工作。它给了我一个“显示一条没有选择的消息”(我把它放在一个消息框中)。给我几分钟,先生。我想这是因为我的代码很乱。记住,返回的数据必须是一个,然后变量才会有值。谢谢,先生,我试过这么做,但仍然不起作用。也许我的代码中还有其他错误。谢谢你,先生。我试过这么做,但仍然不起作用。也许我的代码中还有其他错误。谢谢你,先生,但不幸的是它没有工作。问题差不多解决了,谢谢你,先生,但不幸的是,它并没有起作用。现在问题差不多解决了,谢谢