WPF datagrid แถวว่างที่ด้านล่าง


201

ฉันผูกดาต้ากริดของฉันโดยใช้

//fill datagrid
public DataTable GameData
{
    get
    {
        DataSet ds = new DataSet();
        FileStream fs = new FileStream(IMDB.WebPage.Class.Config.XMLPath,
        FileMode.Open, FileAccess.Read);
        StreamReader reader = new StreamReader(fs, Encoding.Default);
        ds.ReadXml(reader);
        fs.Close();
        DataTable temp = ds.Tables[0];
        return ds.Tables[0];
     }
 }

ด้วยเหตุผลบางอย่างฉันได้แถวที่ว่างเปล่าที่ด้านล่าง และบางครั้งหลังจากคลิกที่ปุ่มและช่องทำเครื่องหมายในตารางจะมีการเพิ่มแถวที่ว่างเปล่า

ทำไมนี้ และฉันจะบล็อกสิ่งนี้ได้อย่างไร

คำตอบ:


447

ดูเหมือนคุณอาจCanUserAddRowsตั้งค่าเป็นจริงสำหรับ DataGrid เพียงเพิ่ม

CanUserAddRows="false"

ถึง XAML


13
โปรดจำไว้ว่าแม้ว่ากล่องกาเครื่องหมายในคุณสมบัติของกริดจะไม่ถูกตรวจสอบคุณต้องเพิ่มบรรทัดของรหัสนั้นเพื่อซ่อนแถวเพิ่มเติม (หรือทำเครื่องหมายและยกเลิกการทำเครื่องหมายในช่อง)
Tobias Valinski

6
ถ้าคุณไม่ต้องการโค้ดด้านหลังเพิ่ม attribute CanUserAddRows = "False" ดูเหมือนว่าจุดบกพร่องใน WPF ที่คุณต้องตั้งค่าเป็นเท็จอย่างชัดเจน
ZZZ

ฉันค่อนข้างมีปัญหาตรงข้าม มันไม่ได้สร้างแถวที่ว่างเปล่าในขณะที่ฉันต้องการ
Shimmy Weitzhandler

21

นอกจากนี้ยังทำงานร่วมกับแอตทริบิวต์:

IsReadOnly="true"

สิ่งนี้ทำงานได้ดีกว่า CanUserAddRows & CanUserDeleteRows
RDV

13

ถ้าคอลเลกชันการสำรองข้อมูลของคุณที่ดำเนินการIEditableCollectionViewส่งคืนจริงจากCanAddNewวิธีการ DataGrid จะถือว่านั่นคือสิ่งที่คุณต้องการทำ

มีภาพรวมที่ดีที่นี่: ภาพรวมของคุณสมบัติการแก้ไขใน WPF DataGrid


3

หากคุณกำลังสร้าง DataGrid แบบทันทีผ่านซอร์สโค้ด ...

DataGrid grid = new DataGrid();

grid.CanUserAddRows = false;

//... 
grid.AutoGenerateColumns = false;
grid.Margin = new Thickness(10,20,10,10);
grid.VerticalAlignment = VerticalAlignment.Top;
grid.ItemsSource = //... and so on

0

แม้ว่า OP จะถามวิธีการลบแถวว่าง แต่ชื่อเรื่องนั้นไม่ได้ระบุไว้และบทความนี้ปรากฏในการค้นหาของฉันขณะที่พยายามหาวิธีเพิ่มแถวว่าง ฉันพบว่าเพื่อให้แถวว่างปรากฏขึ้นไม่เพียง แต่ต้องมีCanUserAddRows="True"เท่านั้น แต่ItemsSourceต้องมีตัวสร้างเริ่มต้นpublic MyClass () { }ด้วย

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