15

データグリッドのデータソース バインディングに関して、多くの質問がありました。リストから DataSource を設定する DatagridView がありました

List<Myclass> li = new List<MyClass>();

MyClass O = new MyClass();
O.Name = "Aden";
O.LastName = "B";
O.Id = 12;
li.Add(O);
O = new MyClass();
O.Name = "Li";
O.LastName = "S";
O.Id = 22;
li.Add(O);

Mydgv.DataSource = li;

MyClass の場所

public Class MyClass
{
 public string Name {get; set;}
 public string LastName {get; set;}
 public decimal Id {get; set;}
}

My DataGridView に新しい行を追加したい

DataGridViewRow row = (DataGridViewRow)yourDataGridView.Rows[0].Clone();
row.Cells[0].Value = "XYZ";
row.Cells[1].Value = 50.2;
Mydgv.Rows.Add(row);

ただし、Datagrid のDatasourceが List liにバインドされているため、エラーが発生することはありません。だから私の最初の質問は、どうすればこれを行うことができるでしょうか?

私の2番目の質問は、これを行うために、リストliを変更してデータの新しい行を追加し、それをデータグリッドのデータソースに設定する解決策を作成しましたが、それは実行可能な解決策ではないと思いますより良い解決策はありますか?

CurrencyManager でやろうとしても

CurrencyManager currencyManager1 = (CurrencyManager)BindingContext[MyGrid.DataSource];
currencyManager1.SuspendBinding();
DataGridViewRow row = (DataGridViewRow)yourDataGridView.Rows[0].Clone();
row.Cells[0].Value = "XYZ";
row.Cells[1].Value = 50.2;
Mydgv.Rows.Add(row);
currencyManager1.ResumeBinding();

私がそれを通して知っているように、私は投稿の 1 つMake Row Visible falseで実行したように、Grid にフォーマットを提供するために DataGrid の Binding を一時停止しました。しかし、データグリッドに行を追加する際にここで機能しないのはなぜですか?

4

5 に答える 5

2

DataGridView にバインドされた後にデータ ソースに行を追加するためのソリューションを次に示します。

フォームで空の DataGridView "Mydgv" とボタン "button1" を使用したことに注意してください。

また、質問と同じ「MyClass」を使用しました。

フォームに「button1」という名前のボタンを 1 つ配置し、次のコードを記述します。

    private void button1_Click(object sender, EventArgs e)
    {
        List<MyClass> li = (List<MyClass>)Mydgv.DataSource;
        MyClass O = new MyClass();

        O.Name = "XYZ";
        O.LastName = "G";
        O.Id = new Random().Next(10, 100);
        li.Add(O);

        Mydgv.DataSource = li.ToList<MyClass>();
    }

ボタンをクリックすると、DataGridView が新しい行で更新されていることがわかります。

DataSource と同じ List オブジェクトを設定する代わりに、以下で説明したように MyClass のリストを試してください。

Mydgv.DataSource = li.ToList<MyClass>();

わかりやすくするために、ID を 10 から 100 までの乱数で表します。

コードに問題がある場合は、確認して返信してください。

于 2013-12-10T06:36:45.740 に答える
0

@Co. アデン

リストをデータソースとしてグリッドにバインドする最初の部分で行ったことはすべて問題ありません。データソースを提供した後、databind メソッドを呼び出すのを忘れた Execpet。

DataBind メソッドを呼び出すと、期待どおりに詳細がグリッドに表示されます。

Mydgv.DataBind();

参照用のサンプル:

C#:

public partial class home : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        List<Student> students = new List<Student>();
        for (int i = 0; i < 10; i++)
        {
            students.Add(new Student(){FirstName = "First Name - " +i.ToString(),LastName = "Last Name - "+i.ToString()});
        }
        students.Add(new Student() { FirstName = " ", LastName = " " });
        UsingDataSourceAndDataBind(students);

    }

    private void UsingDataSourceAndDataBind(List<Student> students)
    {
        GridView1.DataSource = students;
        GridView1.DataBind();
    }
}

class Student
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

ASPX コード:

<body>
<form id="form1" runat="server">
<div>
    <asp:GridView ID="GridView1" runat="server">
    </asp:GridView>
</div>
</form>

于 2013-12-16T09:12:44.963 に答える
0

グローバルを作成

List<Myclass> li = new List<MyClass>();

Page_load または任意の関数の外側

関数内の li に任意の行を追加/削除し、li のデータを変更するときに行の下を呼び出します

gridview.DataSource=li;
gridview.DataBind();
于 2013-12-16T05:01:51.090 に答える