ดัชนีของแถวที่เลือกในปัจจุบันใน DataGridView


96

มันง่ายมาก ฉันจะรับดัชนีRowของ a ที่เลือกในปัจจุบันได้DataGridViewอย่างไร ฉันไม่ต้องการRowวัตถุฉันต้องการดัชนี (0 .. n)

คำตอบ:


167

มีRowIndexคุณสมบัติสำหรับCurrentCellคุณสมบัติสำหรับ DataGridView

datagridview.CurrentCell.RowIndex

จัดการSelectionChangedเหตุการณ์และค้นหาดัชนีของแถวที่เลือกตามด้านบน


1
สมบูรณ์แบบ. สิ่งนี้ดูเหมือนง่ายที่สุด / เร็วที่สุดแม้จะมากกว่า SelectedRows [0] ดัชนี นั่นจะเป็นข้อสันนิษฐานที่ดีหรือไม่?
ErikE

อืมฉันไม่คิดว่าจะมีการเลือกหลายแถว ฉันไม่แน่ใจถึงพฤติกรรมของเซลล์ปัจจุบันในกรณีนี้
ล็ตเชอร์

1
ถ้าเป็นอะไรก็ได้เช่น Excel รายการที่เลือกอาจมีหลายแถว / คอลัมน์ แต่มีเซลล์ปัจจุบัน / ที่ใช้งานอยู่เพียงเซลล์เดียว ฉันสนใจเฉพาะแถวปัจจุบันเท่านั้นดังนั้นสิ่งนี้จะทำได้ดี
ErikE

18
ฉันรู้ว่าโพสต์นี้เก่า แต่อาจช่วยคนอื่นได้: CurrentCellส่งคืนเซลล์ "ใช้งานอยู่" ซึ่งแตกต่างจาก "ที่เลือก" แม้ว่าจะมีการเลือกหลายแถวเซลล์ที่ใช้งานอยู่อาจอยู่ที่อื่นและอาจมีเซลล์ที่ใช้งานได้เพียงเซลล์
ลุคมาร์ลิน

3
และแม้ว่าคุณจะยกเลิกการเลือกทุกอย่างในมุมมองตารางข้อมูลเซลล์ใดเซลล์หนึ่งจะยังคงทำงานอยู่ดังนั้นคุณจึงไม่สามารถพึ่งพาสิ่งนี้ว่าเป็นโมฆะหรืออะไรทำนองนั้นเพราะไม่มีการเลือกแถว
Daniel Gray

37

ใช้คุณสมบัติดัชนีในคอลเลกชัน SelectedRows ของ DGV ของคุณ:

int index = yourDGV.SelectedRows[0].Index;

คุณคิดว่าสิ่งนี้ดีกว่าหรือ DGV.CurrentCell.RowIndex?
ErikE

4
ในบางกรณีอาจไม่ได้เลือกเซลล์ปัจจุบันดังนั้นนี่เป็นวิธีที่ดีกว่า
Little Endian

1
@thethuthinnang เมื่อคุณไม่ได้เลือกแถวการแก้ปัญหาของ @JayRiggs จะทำให้เกิดข้อผิดพลาดของดัชนีสอง คุณควรห่อด้วยif
Allan Ruin

7
dataGridView1.SelectedRows[0].Index;

หรือหากคุณต้องการใช้ LINQ และรับดัชนีของแถวที่เลือกทั้งหมดคุณสามารถทำได้:

dataGridView1.SelectedRows.Select(r => r.Index);

เป็นประโยชน์ (IndexOf ยังไม่ "บนเรดาร์ของฉัน" จริงๆ) แต่การอ้อมเนื่องจากไม่จำเป็นต้องได้รับแถว วิธีการ. ดัชนีคือสิ่งที่ฉันกำลังมองหา
ErikE


3

ลองใช้มันจะได้ผล ... มันจะให้ดัชนีของดัชนีแถวที่เลือก ...

int rowindex = dataGridView1.CurrentRow.Index;
MessageBox.Show(rowindex.ToString());

2

ลองดู

bool flag = dg1.CurrentRow.Selected;

if(flag)
{
  /// datagridview  row  is  selected in datagridview rowselect selection mode

}
else
{
  /// no  row is selected or last empty row is selected
}

ขอบคุณสิ่งที่ฉันต้องการในการกำหนดค่าที่ซ่อนอยู่ของแถวที่เลือกเมื่อใช้การควบคุมที่ไม่เกี่ยวข้องกับ gridview
orgtigger

2

ฉันแก้ไขคำตอบของ @JayRiggs และได้ผล คุณต้องใช้ifเนื่องจากบางครั้ง SelectedRows อาจว่างเปล่าดังนั้นการดำเนินการดัชนีจะทำให้เกิดข้อยกเว้น

if (yourDGV.SelectedRows.Count>0){
    int index = yourDGV.SelectedRows[0].Index;
}

1

ลองDataGridView.CurrentCellAddress

ผลตอบแทน: จุดที่แสดงดัชนีแถวและคอลัมน์ของเซลล์ที่ใช้งานอยู่ในปัจจุบัน

EG เลือกคอลัมน์แรกและแถวที่ห้าแล้วคุณจะกลับมา: Point (X = 1, Y = 5)


ป.ล. ตั้งแต่ฉันขอดัชนีแถวสิ่งต่าง ๆ จะไม่ค่อยมีความสำคัญในความสัมพันธ์ของเราถ้าคุณพูดว่าDataGridView.CurrentCellAddress.Y... :)
ErikE

ฉันคิดว่า ณ จุดนี้คำตอบทั้งหมดเหล่านี้ถูกต้องขึ้นอยู่กับคุณว่าคุณต้องการเลือกคำตอบใดที่สะอาดที่สุดสำหรับวัตถุประสงค์ของคุณ ผมขอแนะนำให้พิมพ์ขึ้นการใช้งานที่แตกต่างกันและกำลังมองหาที่อิลลินอยส์ใน .NET สะท้อน ( red-gate.com/products/reflector ) ถ้าคุณอยากจะเห็นสิ่งที่ได้รับรหัสที่สร้างขึ้นสำหรับแต่ละ แต่เป็นจำนวนมากจะบอกว่าเป็นไมโคร - การเพิ่มประสิทธิภาพ มันลงไปที่เจตนาชัดเจนที่สุด ปล. หมายเหตุนำไปเพื่อความชัดเจนในอนาคต
Kilanash

1

ลองมัน:

int rc=dgvDataRc.CurrentCell.RowIndex;** //for find the row index number
MessageBox.Show("Current Row Index is = " + rc.ToString());

ฉันหวังว่ามันจะช่วยคุณได้


3
ขอบคุณสำหรับการบิ่นใน แต่คำตอบของคุณซ้ำ (คำตอบและ upvoted มากที่สุด) datagridview.CurrentCell.RowIndexที่เลือกซึ่งทำให้การแก้ปัญหา ขออภัย - ฉันจะแนะนำให้ลบโพสต์นี้เนื่องจากเป็นรายการที่ซ้ำกัน
ErikE

0

คุณสามารถลองใช้รหัสนี้:

int columnIndex = dataGridView.CurrentCell.ColumnIndex;
int rowIndex = dataGridView.CurrentCell.RowIndex;

0

ฉันใช้ถ้าได้รับค่าแถวถูกคลิก:

private void dataGridView_Product_CellClick(object sender, DataGridViewCellEventArgs e){
    int rowIndex;
    //rowIndex = e.RowIndex; //Option 1
    //rowIndex= dataGridView_Product.CurrentCell.RowIndex; //Option 2
    rowIndex = dataGridView_Product.CurrentRow.Index; //Option 3
}

-1

ลองทำดังต่อไปนี้:

int myIndex = MyDataGrid.SelectedIndex;

สิ่งนี้จะให้ดัชนีของแถวที่เลือกไว้ในปัจจุบัน

หวังว่านี่จะช่วยได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.