C#: How do you edit items and subitems in a listview?

后端 未结 5 394
失恋的感觉
失恋的感觉 2020-11-29 06:41

How do you edit items and subitems in a listview? Let\'s say I have a listview with 3 columns,and subitems,

Car Brand | Car Name | Car Year
Ford      | Mustang         


        
相关标签:
5条回答
  • 2020-11-29 07:00

    Sorry, don't have enough rep, or would have commented on CraigTP's answer.

    I found the solution from the 1st link - C# Editable ListView, quite easy to use. The general idea is to:

    • identify the SubItem that was selected and overlay a TextBox with the SubItem's text over the SubItem
    • give this TextBox focus
    • change SubItem's text to that of TextBox's when TextBox loses focus

    What a workaround for a seemingly simple operation :-|

    0 讨论(0)
  • 2020-11-29 07:01

    I use a hidden textbox to edit all the listview items/subitems. The only problem is that the textbox needs to disappear as soon as any event takes place outside the textbox and the listview doesn't trigger the scroll event so if you scroll the listview the textbox will still be visible. To bypass this problem I created the Scroll event with this overrided listview.

    Here is my code, I constantly reuse it so it might be help for someone:

    ListViewItem.ListViewSubItem SelectedLSI;
    private void listView2_MouseUp(object sender, MouseEventArgs e)
    {
        ListViewHitTestInfo i = listView2.HitTest(e.X, e.Y);
        SelectedLSI = i.SubItem;
        if (SelectedLSI == null)
            return;
    
        int border = 0;
        switch (listView2.BorderStyle)
        {
            case BorderStyle.FixedSingle:
                border = 1;
                break;
            case BorderStyle.Fixed3D:
                border = 2;
                break;
        }
    
        int CellWidth = SelectedLSI.Bounds.Width;
        int CellHeight = SelectedLSI.Bounds.Height;
        int CellLeft = border + listView2.Left + i.SubItem.Bounds.Left;
        int CellTop =listView2.Top + i.SubItem.Bounds.Top;
        // First Column
        if (i.SubItem == i.Item.SubItems[0])
            CellWidth = listView2.Columns[0].Width;
    
        TxtEdit.Location = new Point(CellLeft, CellTop);
        TxtEdit.Size = new Size(CellWidth, CellHeight);
        TxtEdit.Visible = true;
        TxtEdit.BringToFront();
        TxtEdit.Text = i.SubItem.Text;
        TxtEdit.Select();
        TxtEdit.SelectAll();
    }
    private void listView2_MouseDown(object sender, MouseEventArgs e)
    {
        HideTextEditor();
    }
    private void listView2_Scroll(object sender, EventArgs e)
    {
        HideTextEditor();
    }
    private void TxtEdit_Leave(object sender, EventArgs e)
    {
        HideTextEditor();
    }
    private void TxtEdit_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Return)
            HideTextEditor();
    }
    private void HideTextEditor()
    {
        TxtEdit.Visible = false;
        if (SelectedLSI != null)
            SelectedLSI.Text = TxtEdit.Text;
        SelectedLSI = null;
        TxtEdit.Text = "";
    }
    
    0 讨论(0)
  • 2020-11-29 07:09

    Click the items in the list view. Add a button that will edit the selected items. Add the code

    try
    {              
        LSTDEDUCTION.SelectedItems[0].SubItems[1].Text = txtcarName.Text;
        LSTDEDUCTION.SelectedItems[0].SubItems[0].Text = txtcarBrand.Text;
        LSTDEDUCTION.SelectedItems[0].SubItems[2].Text = txtCarName.Text;
    }
    catch{}
    
    0 讨论(0)
  • 2020-11-29 07:12

    If you're looking for "in-place" editing of a ListView's contents (specifically the subitems of a ListView in details view mode), you'll need to implement this yourself, or use a third-party control.

    By default, the best you can achieve with a "standard" ListView is to set it's LabelEdit property to true to allow the user to edit the text of the first column of the ListView (assuming you want to allow a free-format text edit).

    Some examples (including full source-code) of customized ListView's that allow "in-place" editing of sub-items are:

    C# Editable ListView
    In-place editing of ListView subitems

    0 讨论(0)
  • 2020-11-29 07:16
    private void listView1_MouseDown(object sender, MouseEventArgs e)
    {
        li = listView1.GetItemAt(e.X, e.Y);
        X = e.X;
        Y = e.Y;
    }
    
    private void listView1_MouseUp(object sender, MouseEventArgs e)
    {
        int nStart = X;
        int spos = 0;
        int epos = listView1.Columns[1].Width;
        for (int i = 0; i < listView1.Columns.Count; i++)
        {
            if (nStart > spos && nStart < epos)
            {
                subItemSelected = i;
                break;
            }
    
            spos = epos;
            epos += listView1.Columns[i].Width;
        }
        li.SubItems[subItemSelected].Text = "9";
    }
    
    0 讨论(0)
提交回复
热议问题