中央のアイテムが削除されたときに、データグリッド内のアイテムを順番に保持する方法WPF C#

Roxy'Pro

私はDataGridこの方法でデータベースから自分アイテムをロードしています(フォームのロード時):

dataGridArticles.ItemsSource = null;
dataGridArticles.ItemsSource = listCurrentArticles;

また、データグリッドリストにアイテムを追加する機能があり、DELキーを押すことでアイテムを削除することもできます<データグリッドは自動的にリストからアイテムを削除します>。

しかし、データグリッドのソースであるリストにアイテムを入力するときは、各アイテムにOrdinalNumberも設定します。たとえば、リストに新しいアイテムを追加するときは、次のことを行います。

article.OrdinalNumber = GetCurrentlyMaxOrdinalNumber()+1;

したがって、アイテムを次々に追加すると、序数は1、2、3、4、5 ...などになり、次のようになります(赤でマーク):

ここに画像の説明を入力してください

記事テーブルから最大序数を返すストアドプロシージャ:

CREATE DEFINER=`root`@`localhost` PROCEDURE `ArticleGetNextCodeNumber`()
BEGIN
Select ifnull(max(OriginalArticleCode),0)
from articles;
END

そして、これは私が私のリストに新しいアイテムを追加しているときに起こっていることです:私は新しい記事のために次の序数と他のいくつかの属性を設定しています:

 private void btnSaveChangesOnArticle_Click(object sender, RoutedEventArgs e)
        {

            try
            {
                if (newItem)
                {


                    Article newArticle = new Article();

                    newArticle.ArticleCode = txtArticleCode.Text.Trim();
                    newArticle.OriginalArticleCode = Convert.ToInt32(ArticlesController.Instance.GetNextArticleCode()) + 1; // Here I'm setting new article ordinal number

                    newArticle.Title = txtArticleTitle.Text.Trim();
                    newArticle.Price = Convert.ToDecimal(txtPrice.Text.Trim());


                    var lastInserted = ArticlesController.Instance.Save(newArticle);



                    MessageBox.Show("Operation Successful.");



                    listCurrentArticles.Add(lastInserted);

                    dataGridArticles.ItemsSource = null;
                    dataGridArticles.ItemsSource = listCurrentArticles;
                }
            }
        }
    }

そして今、ユーザーがDELETE KEYを押してデータグリッドからアイテムを削除したときに、序数を再編成するにはどうすればよいでしょうか。たとえば、データグリッドに5つのアイテムを追加した場合、ユーザーが2番目のアイテムを削除した場合、注文よりも次のようになります:1 3 4 5 .. 1 2 34の挿入

だから私の質問はみんなです、それを常に順序付けておくために何かが変わったとき、どうすればそれを再編成できますか(それで私にとって重要ではないので序数をデータベースに保持する必要はないかもしれません、私はそれを使っていますUIの見栄えを良くし、DataGridに追加したアイテムの数をユーザーに表示します)。

どうもありがとう、乾杯!

mm8

OrdinalNumberDataGridTextColumnをaに置き換え、コンバーターDataGridTemplateColumn使用しGetIndex()て親DataGridRowコンテナーのメソッドの値を返すことができます。

アイテムの数が変更されたとき、つまりアイテムが追加または削除されたときにバインドが更新されるようにするには、親DataGridRowそれ自体CountItemsプロパティのプロパティの両方にバインドする必要がありDataGridます。

これは実装が非常に簡単なはずです。IMultiValueConverterインターフェイスを実装するクラスを作成します。

namespace WpfApplication3
{
    public class RowNumberConverter : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            return ((values[0] as DataGridRow).GetIndex() + 1).ToString();
        }

        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}

そして、次のように使用します。

<DataGrid x:Name="dataGridArticles" AutoGenerateColumns="False" xmlns:local="clr-namespace:WpfApplication3">
    <DataGrid.Resources>
        <local:RowNumberConverter x:Key="RowNumberConverter" />
    </DataGrid.Resources>
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="#" IsReadOnly="True">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock>
                        <TextBlock.Text>
                            <MultiBinding Converter="{StaticResource RowNumberConverter}">
                                <Binding Path="." RelativeSource="{RelativeSource AncestorType=DataGridRow}" />
                                <Binding Path="Items.Count" RelativeSource="{RelativeSource AncestorType=DataGrid}" />
                            </MultiBinding>
                        </TextBlock.Text>
                    </TextBlock>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <!-- + the rest of your columns -->
    </DataGrid.Columns>
</DataGrid>

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

カスタム イベントを使用してクリアされたときに、リスト内のアイテムのテキスト ボックス コントロール カウントを更新する <> C#

分類Dev

コンボボックスがc#のテーブルにバインドされているときに、別の形式でコンボボックス内のアイテムを選択する方法

分類Dev

プログレスバーをリストボックスアイテムの削除と同期する方法c#

分類Dev

リスト内のアイテムがC#ウィンドウフォームアプリケーションのカスタムオブジェクトであるときに、CheckedListBoxのボックスをチェックするにはどうすればよいですか?

分類Dev

リストアイテムをデータグリッドビューに表示するc#

分類Dev

c#配列内のアイテムを削除する方法は?

分類Dev

C#を使用してアイテムを削除するときに、リストビューのアイテムの合計値を自動計算します

分類Dev

c#WPFがデータテーブルにバインドされたリストボックスからアイテムを選択

分類Dev

リストビューアイテムがフォーカスされているときにメソッドを呼び出すC#

分類Dev

プロパティグリッドC#のポップアップメニューに列挙型アイテムの説明を表示する方法

分類Dev

foreachループ内にあるリスト内のアイテムを削除しますc#

分類Dev

アイテムを1回だけ読み取る必要がある場合、ルックアップ後にC#ディクショナリからアイテムを削除することによるパフォーマンス上の利点

分類Dev

C#でシリアル化を使用せずにフォームを再度開いたときに、選択したコンボボックスアイテムとボタンのテキストを取得する方法

分類Dev

リスト内の削除されたアイテムのチェックに使用される組み込みC#例外

分類Dev

MongoDBデータベースに入力された最後のN個のアイテムを返すためのC#関数が必要です

分類Dev

C#ウィンドウフォームのListViewにグループとアイテムを追加する

分類Dev

リストボックスのアイテムを削除する方法 c#

分類Dev

C#の別のフォームからリストボックスにアイテムを追加する方法

分類Dev

c#を使用してリストのアイテムをインデックスとともにテキストファイルに保存する方法

分類Dev

Objective c最初のテキストフィールドアイテムの選択に基づいて、2番目と3番目のテキストフィールドのアイテムを削除する方法

分類Dev

c#レコードが追加されたときにデータグリッドを更新する方法

分類Dev

グリッドビューアイテムテンプレートにネストされたdivのクラスをc#の背後にあるコードから動的に変更します

分類Dev

c#wpfアイテムの横にあるtoggleswitch(treearrow)をクリックすると、treeviewitemの名前(またはタグ)を取得します

分類Dev

C#で一意のアイテムのリストから複数の正規表現の置換を順番に実行する方法

分類Dev

C#でリスト内の3つのアイテムを無限にローテーションするための最良の方法は何ですか

分類Dev

C#WPFグリッド内のアイテムの選択

分類Dev

Automapped GlassアイテムC#のSitecoreデータアイテムIDを取得する方法

分類Dev

C#でグループボックス内のすべてのアイテムを表示する方法

分類Dev

C#-特定のアイテムがチェックされたときにチェックリストボックスのアイテムを自動チェックする

Related 関連記事

  1. 1

    カスタム イベントを使用してクリアされたときに、リスト内のアイテムのテキスト ボックス コントロール カウントを更新する <> C#

  2. 2

    コンボボックスがc#のテーブルにバインドされているときに、別の形式でコンボボックス内のアイテムを選択する方法

  3. 3

    プログレスバーをリストボックスアイテムの削除と同期する方法c#

  4. 4

    リスト内のアイテムがC#ウィンドウフォームアプリケーションのカスタムオブジェクトであるときに、CheckedListBoxのボックスをチェックするにはどうすればよいですか?

  5. 5

    リストアイテムをデータグリッドビューに表示するc#

  6. 6

    c#配列内のアイテムを削除する方法は?

  7. 7

    C#を使用してアイテムを削除するときに、リストビューのアイテムの合計値を自動計算します

  8. 8

    c#WPFがデータテーブルにバインドされたリストボックスからアイテムを選択

  9. 9

    リストビューアイテムがフォーカスされているときにメソッドを呼び出すC#

  10. 10

    プロパティグリッドC#のポップアップメニューに列挙型アイテムの説明を表示する方法

  11. 11

    foreachループ内にあるリスト内のアイテムを削除しますc#

  12. 12

    アイテムを1回だけ読み取る必要がある場合、ルックアップ後にC#ディクショナリからアイテムを削除することによるパフォーマンス上の利点

  13. 13

    C#でシリアル化を使用せずにフォームを再度開いたときに、選択したコンボボックスアイテムとボタンのテキストを取得する方法

  14. 14

    リスト内の削除されたアイテムのチェックに使用される組み込みC#例外

  15. 15

    MongoDBデータベースに入力された最後のN個のアイテムを返すためのC#関数が必要です

  16. 16

    C#ウィンドウフォームのListViewにグループとアイテムを追加する

  17. 17

    リストボックスのアイテムを削除する方法 c#

  18. 18

    C#の別のフォームからリストボックスにアイテムを追加する方法

  19. 19

    c#を使用してリストのアイテムをインデックスとともにテキストファイルに保存する方法

  20. 20

    Objective c最初のテキストフィールドアイテムの選択に基づいて、2番目と3番目のテキストフィールドのアイテムを削除する方法

  21. 21

    c#レコードが追加されたときにデータグリッドを更新する方法

  22. 22

    グリッドビューアイテムテンプレートにネストされたdivのクラスをc#の背後にあるコードから動的に変更します

  23. 23

    c#wpfアイテムの横にあるtoggleswitch(treearrow)をクリックすると、treeviewitemの名前(またはタグ)を取得します

  24. 24

    C#で一意のアイテムのリストから複数の正規表現の置換を順番に実行する方法

  25. 25

    C#でリスト内の3つのアイテムを無限にローテーションするための最良の方法は何ですか

  26. 26

    C#WPFグリッド内のアイテムの選択

  27. 27

    Automapped GlassアイテムC#のSitecoreデータアイテムIDを取得する方法

  28. 28

    C#でグループボックス内のすべてのアイテムを表示する方法

  29. 29

    C#-特定のアイテムがチェックされたときにチェックリストボックスのアイテムを自動チェックする

ホットタグ

アーカイブ