を追加し、私は、マスタデータがDataGridViewのにバインドされたテキストボックスやその他のコントロールおよび詳細データにバインドされたマスター・ディテール・ウィンドウにバインドデータをロードするために、次のコードを持っている:FORM負荷にWinformsののBindingSourceの問題新しいレコード
:
をDataSet dsOrders = new DataSet("dsOrders");
SqlDataAdapter daOrderHeader;// = new SqlDataAdapter();
SqlDataAdapter daOrderDetail;// = new SqlDataAdapter();
BindingSource bsOrderHeader = new BindingSource();
BindingSource bsOrderDetail = new BindingSource();
DataTable dtOrderHeader = new DataTable("dtOrderHeader");
DataTable dtOrderDetail = new DataTable("dtOrderDetail");
dsOrders.Tables.Add(dtOrderHeader);
dsOrders.Tables.Add(dtOrderDetail);
daOrderHeader = DataAdapterOrderHeader();
daOrderDetail = DataAdapterOrderDetail();
daOrderHeader.Fill(dtOrderHeader);
daOrderDetail.Fill(dtOrderDetail);
////Set up a master-detail relationship between the DataTables
DataColumn keyOrderHeaderColumn = dsOrders.Tables["dtOrderHeader"].Columns["ID"];
DataColumn foreignKeyOrderDetailColumn = dsOrders.Tables["dtOrderDetail"].Columns["OrderId"];
dsOrders.Relations.Add("rOrders", keyOrderHeaderColumn, foreignKeyOrderDetailColumn);
bsOrderHeader.DataSource = dsOrders;
bsOrderHeader.DataMember = "dtOrderHeader";
bsOrderDetail.DataSource = bsOrderHeader;
bsOrderDetail.DataMember = "rOrders";
tbxOrderNo.DataBindings.Add("Text", bsOrderHeader, "ID");
tbxCustomer.DataBindings.Add("Text", bsOrderHeader, "Name");
tbxTaxRate.DataBindings.Add("Text", bsOrderHeader, "TaxRate");
tbxShipping.DataBindings.Add("Text", bsOrderHeader, "Shipping");
tbxExchangeRate.DataBindings.Add("Text", bsOrderHeader, "ExchangeRate");
dtpOrderDate.DataBindings.Add("Text", bsOrderHeader, "OrderDate");
cbxPriceCode.DataBindings.Add("SelectedIndex", bsOrderHeader, "PriceCode");
dgvItems.DataSource = bsOrderDetail;
enter code here
ONは、新しいレコードを追加:
DataRow drOrderHeader = dsOrders.Tables["dtOrderHeader"].NewRow();
drOrderHeader["ID"] = (maxID + 1);
dsOrders.Tables["dtOrderHeader"].Rows.Add(drOrderHeader);
DataRow drOrderDetail = dsOrders.Tables["dtOrderDetail"].NewRow();
drOrderDetail["OrderId"] = (maxID + 1);
dsOrders.Tables["dtOrderDetail"].Rows.Add(drOrderDetail);
bsOrderHeader.DataSource = dsOrders.Tables["dtOrderHeader"];
bsOrderDetail.DataSource = dsOrders.Tables["dtOrderDetail"];
私は新しい行の追加]ボタンをクリックした場合、bindingsource.countプロパティは新しいレコードが追加されていることを示しているが、Winフォームの続きロールは同じレコードにとどまり、私は新しく作成されたレコードにスクロールできません。また、bindingsource.movelastは動作を停止しました。
お願いします。必要なのは、新しく追加されたレコード/行をスクロールして、すべてのwinformテキストボックスをクリアし、新しいレコードのデータを入力できる状態にすることです。ボタンが、あなたはすでに見つかったよう
newOrderId = Convert.ToInt32(dsOrders.Tables["dtOrderHeader"].Compute("max(ID)", string.Empty)) + 1;
DataRow drOrderHeader = dsOrders.Tables["dtOrderHeader"].NewRow();
drOrderHeader["ID"] = (newOrderId);
dsOrders.Tables["dtOrderHeader"].Rows.Add(drOrderHeader);
DataRow drOrderDetail = dsOrders.Tables["dtOrderDetail"].NewRow();
drOrderDetail["OrderId"] = (newOrderId);
dsOrders.Tables["dtOrderDetail"].Rows.Add(drOrderDetail);
bsOrderHeader.Position = bsOrderHeader.Find("ID", newOrderId);
イワン、私を助けてくれてありがとう。私は自分のコードを変更しましたが(UPDATE参照)、同じ結果が得られます。追加ボタンをクリックした後のレコードにとどまり、bsOrderHeader.MoveLastも機能しなくなります。 – superconsultant
それは変です。編集を参照し、図示されていないコードをチェックしてください。 –
ありがとうIvan、それは働いた。私はまた別の問題を抱えていました。私のフォームのコントロールの1つは、チェックボックスともう1つのコンボボックスで、DataTableにデフォルト値を設定する必要があります( 'dtOrderHeader.Columns [" Paid "]。DefaultValue = 0; dtOrderHeader .Columns ["PriceCode"]。DefaultValue = 0; ')私がそれを修正するまで、バインディングソースのナビゲーションを破っていて、新しく追加されたレコードにスクロールしませんでした。とにかく、もう一度感謝して、私はあなたの助けを非常に感謝します。 – superconsultant