すべての従業員のリストを表示する GridView コントロールがあります。ユーザーがこのリストから任意の従業員を選択すると、すべての入力コントロールに値が事前に入力された状態で、レコードが Web フォームに表示されます。
これを行うための良いアプローチを知りたいです。すべての入力コントロールを任意の SqlDataSource にバインドする必要がありますか、または DataSet から値を選択してすべての入力コントロールを再設定する必要があります。
すべての従業員のリストを表示する GridView コントロールがあります。ユーザーがこのリストから任意の従業員を選択すると、すべての入力コントロールに値が事前に入力された状態で、レコードが Web フォームに表示されます。
これを行うための良いアプローチを知りたいです。すべての入力コントロールを任意の SqlDataSource にバインドする必要がありますか、または DataSet から値を選択してすべての入力コントロールを再設定する必要があります。
まず、GridView に選択ボタンを次のように追加します。
<asp:ButtonField Text="Select" CommandName="ViewMe" ButtonType="Button" />
次に、ボタンがクリックされたときにこの関数を呼び出すOnRowCommand="RowCommand"
プロパティを追加し、関数の背後にあるコードに追加します。GridView
protected void RowCommand(object sender, GridViewCommandEventArgs e)
{
// if the ViewMe command is fired
if (e.CommandName == "ViewMe")
{
// go to find the index on the grid view
int iTheIndexNow;
if (int.TryParse(e.CommandArgument.ToString(), out iTheIndexNow))
{
// Set and highlight the selected
TheGridView.SelectedIndex = iTheIndexNow;
// do we have the table data id ?
if (TheGridView.SelectedValue != null)
{
// now load the controls data using this id
LoadValuesFromDatabaseToControls(TheGridView.SelectedValue);
}
}
}
}
選択、編集、さらには削除やコピーよりも多くのコマンドを追加できるため、私はこの方法のコマンド ボタンを好みます...インデックスの変更は、何らかの理由で (たとえば、ページの変更によって) 行うことができます。選択する。
データベースからデータをロードするために subsonic 2 DAL を使用します。私のプログラムのサンプルコードは次のとおりです。
void LoadValuesFromDatabaseToControls(string editID)
{
// Load it from database
AthUserMaiListName OneRow = new AthUserMaiListName(editID);
if (OneRow.IsNotExist)
{
// a custom control that show messages on top.
uResult.addMsg("Fail to load id " + editID, MsgType.error);
// close the view of the controls
dbViewPanel.Visible = false;
}
else // else we have the data and go for show them
{
// show this panel that contains the controls.
dbViewPanel.Visible = true;
// I keep my current edit id
lblID.Text = editID;
// just be sure that the select exist on DrowDownList
MyUtils.SelectDropDownList(ddlEventType, OneRow.CAddedFrom);
txtEmail.Text = OneRow.CEmail;
txtFirstName.Text = OneRow.CFirstName;
txtLastName.Text = OneRow.CLastName;
txtInsideTitle.Text = OneRow.CInsideTitle;
txtCompanyName.Text = OneRow.CCompanyName;
txtCreated.Text = DateTimeRender(OneRow.CreatedOn);
txtModified.Text = DateTimeRender(OneRow.ModifiedOn);
}
}
アプリケーションでこのコードを使用しました-
より良いアプローチは、gridview_select_index_change()
イベントでこのメソッドを呼び出すことです
private void PickValues(int SerialNum)
{
DataSet ds = new DataSet();
try
{
string Query = "SELECT * FROM tw_main WHERE sno = " + SerialNum;
ds = reuse.ReturnDataSet(Query, "Scheme");
//Add Scheme Code to new Session Variable
Session.Add("SerialNumber", ds.Tables[0].Rows[0]["sno"].ToString());
//Set Update Flag
TaskFlag = "UPDATE";
//Fill values of selected record on the Entry Form
if (ds.Tables[0].Rows[0]["schm_code"].ToString().Length > 0)
lblSchemeCode.Text = ds.Tables[0].Rows[0]["schm_code"].ToString();
ddlType.SelectedValue = ds.Tables[0].Rows[0]["schemetype"].ToString(); ddlDistrict.Text = ds.Tables[0].Rows[0]["dist_nm"].ToString(); ddlBlock.Text = ds.Tables[0].Rows[0]["block_nm"].ToString();
txtSchemeName.Text = ds.Tables[0].Rows[0]["schm_nm"].ToString();
txtPopulation2001.Text = ds.Tables[0].Rows[0]["population_2001"].ToString();
txtSupplySource.Text = ds.Tables[0].Rows[0]["supply_source"].ToString();
txtApprovalYear.Text = ds.Tables[0].Rows[0]["yr_approval"].ToString();
txtApprovalLetterNum.Text = ds.Tables[0].Rows[0]["approval_letter_num"].ToString();
txtApprovalAmount.Text = ds.Tables[0].Rows[0]["sch_apr_amt"].ToString();
txtWaitedLetterNum.Text = ds.Tables[0].Rows[0]["sch_waited_details"].ToString();
txtSchTransferLetterNum.Text = ds.Tables[0].Rows[0]["schm_trans_details"].ToString();
txtSchTransferDate.Text = ds.Tables[0].Rows[0]["schm_trans_date"].ToString();
txtOtherRemarks.Text = ds.Tables[0].Rows[0]["remarks"].ToString();
}
catch (Exception ex)
{
ScriptManager.RegisterClientScriptBlock(this.Page, this.Page.GetType(), "Warning", "alert('" + ex.Message.ToString() + "');",true);
}
finally
{
ds.Dispose();
gridSerialNo = 0;
}
}
編集
そうするためのより良いアプローチがあるかもしれませんが、これは確かにうまくいきます。
データアクセスレイヤーを作成したいので、このタスクを実行する方法は、すべてのプロパティを持つクラスを作成することです
クラス:
public class tw_main
{
public string SchemeCode {get;set;}
}
ダル:
public class dal
{
public tw_main getSelectedValue(pass the parameters required by the method)
{
//your connection and query code
var twmain = new tw_main();
twmain.SchemaCode = ds.Tables[0].Rows[0]["schm_code"].ToString();
return twmain;
}
}
ウェブページ:
//depending upon where you add this a reference may need to be imported (using) to the namespace
var dalObj = new dal();
var tw = dalObj.getSelectedValue();
lblSchemeCode.Text = tw.SchemaCode;