1

私が現在やろうとしていることにはいくつかの問題があります:

  1. 顧客レコードを収集する Linq-to-SQL (DBML) は匿名型を返しますか? これにより、クエリ結果をパラメーターとして渡すことで、ページ要素の初期化を一度宣言できるメソッドを呼び出すことができなくなります。
  2. 関連する ID フィールドを格納することで現在のレコードをインクリメント/デクリメントするページに次/前のボタンを提供しようとしています。次に、これはポストバックし、ポストバックで押されたボタンに応じて次または前のレコードを表示します (ボタンがクリックされる前に Page_Load が常に最初に呼び出されることはわかっていますが、これにどのようにアプローチするかはわかりません)。

これまでのバックエンド コード:

DataClassesDataContext db;
string aspControlNotation = "ctl00$ContentPlaceHolder1$";

protected void Page_Load(object sender, EventArgs e)
{
    db = new DataClassesDataContext((string)Session["Conn"]);


    int nID = 0; //Initialise variable
    string hnIDPostedVal = "";

    #region If the user has not directly navigated to the page
    if (!IsPostBack)
    {
        var queryIDInitialise = (from r in db.tblQuoteLogs
                                 orderby r.LogDate descending
                                 select new
                                 {
                                     #region Selected Fields
                                     r.nID,
                                     r.LogDate
                                     #endregion
                                 }).First();

        hnID.Value = queryIDInitialise.nID.ToString();
        nID = Convert.ToInt32(hnID.Value);

        var query1 = (from r in db.tblQuoteLogs
                      where r.nID == nID
                      join emp in db.tblEmployees on r.QuotedBy equals emp.ID into r1
                      join cus in db.tblCustomers on r.luLocation equals cus.ID into r2
                      join qfr in db.tblQuoteFailReasons on r.ReasonForLost equals qfr.ID into r3
                      from x in r1.DefaultIfEmpty()
                      from y in r2.DefaultIfEmpty()
                      from z in r3.DefaultIfEmpty()
                      orderby r.LogDate descending
                      select new
                      {
                          nID = r.nID,
                          Quote_Reference = r.Quote_Reference,
                          Validity = r.Validity,
                          TMF = r.TMF,
                          QuotedBy = r.QuotedBy,
                          EnteredBy = r.EnteredBy,
                          LogDate = r.LogDate,
                          luCustomer = r.luCustomer,
                          luLocation = r.luLocation,
                          txtContact = r.txtContact,
                          txtTelephone = r.txtTelephone,
                          POO = r.POO,
                          POL = r.POL,
                          POD = r.POD,
                          FPOD = r.FPOD,
                          txtEquipmentType = r.txtEquipmentType,
                          txtCommodity = r.txtCommodity,
                          NamedAcct = r.NamedAcct,
                          Cross_Trade = r.Cross_Trade,
                          Haz = r.Haz,
                          Break_Bulk = r.Break_Bulk,
                          Reefer = r.Reefer,
                          txtTargetTEU = r.txtTargetTEU,
                          Frequency = r.Frequency,
                          FollowUpDueDate = r.FollowUpDueDate,
                          UKSalesComments = r.UKSalesComments,
                          Secured = r.Secured,
                          Lost = r.Lost,
                          txtLostQuoteReasons = z.txtLostQuoteReasons,
                          dateOfFollowUp = r.dateOfFollowUp,
                          txtSalesPerson = x.txtSalesPerson, //Gets ID from the QuotedBy column to get the particular sales person name
                          txtLocation = y.txtLocation //Gets ID from the luLocation column to get the particular location
                      }).First();

        //Initialise Page Elements (With Checks for null fields)
        txtQuoteRef.Text = (!String.IsNullOrEmpty(query1.Quote_Reference)) ? query1.Quote_Reference : "No Data";
        txtValidity.Text = (query1.Validity != null) ? query1.Validity.ToString() : "No Date";

        lblEnteredByVal.Text = (!String.IsNullOrEmpty(query1.EnteredBy)) ? query1.EnteredBy : "No Data";
        lblLogDateVal.Text = (query1.LogDate != null) ? query1.LogDate.ToString() : "No Date";

        txtCustomer.Text = (!String.IsNullOrEmpty(query1.luCustomer)) ? query1.luCustomer : "No Data";
        txtLocation.Text = (!String.IsNullOrEmpty(query1.txtLocation)) ? query1.txtLocation : "No Data"; //BUGGY DUE TO NULL ENTRIES

        txtContact.Text = (!String.IsNullOrEmpty(query1.txtContact)) ? query1.txtContact : "No Data";
        txtTelephone.Text = (!String.IsNullOrEmpty(query1.txtTelephone)) ? query1.txtTelephone : "No Data";
        txtPOO.Text = (!String.IsNullOrEmpty(query1.POO)) ? query1.POO : "No Data";
        txtPOL.Text = (!String.IsNullOrEmpty(query1.POL)) ? query1.POL : "No Data";
        txtPOD.Text = (!String.IsNullOrEmpty(query1.POD)) ? query1.POD : "No Data";
        txtFPOD.Text = (!String.IsNullOrEmpty(query1.FPOD)) ? query1.FPOD : "No Data";

        txtEquipmentType.Text = (!String.IsNullOrEmpty(query1.txtEquipmentType)) ? query1.txtEquipmentType : "No Data";
        txtCommodity.Text = (!String.IsNullOrEmpty(query1.txtCommodity)) ? query1.txtCommodity : "No Data";
        txtNamedAccount.Text = (!String.IsNullOrEmpty(query1.NamedAcct)) ? query1.NamedAcct : "No Data";

        chkCrossTrade.Checked = (query1.Cross_Trade != null) ? query1.Cross_Trade.Value : false;
        chkHaz.Checked = (query1.Haz != null) ? query1.Haz.Value : false;
        chkBreakBulk.Checked = (query1.Break_Bulk != null) ? query1.Break_Bulk.Value : false;
        chkReefer.Checked = (query1.Reefer != null) ? query1.Reefer.Value : false;

        txtTargetTEU.Text = (!String.IsNullOrEmpty(query1.txtTargetTEU)) ? query1.txtTargetTEU : "No Data";
        txtFrequency.Text = (!String.IsNullOrEmpty(query1.Frequency)) ? query1.Frequency : "No Data";

        txtFollowUpTarget.Text = (query1.FollowUpDueDate != null) ? query1.FollowUpDueDate.ToString() : "No Date";
        txtUKSalesComments.Text = (!String.IsNullOrEmpty(query1.UKSalesComments)) ? query1.UKSalesComments : "";
        chkSecured.Checked = (query1.Secured != null) ? query1.Secured.Value : false;
        chkLost.Checked = (query1.Lost != null) ? query1.Lost.Value : false;
        txtReasonForLost.Text = (!String.IsNullOrEmpty(query1.txtLostQuoteReasons)) ? query1.txtLostQuoteReasons : "";

        #region Get current users' login name and strip it down
        string loggedUName = WindowsIdentity.GetCurrent().Name.ToString();
        lblFollowedUpByVal.Text = loggedUName.Substring(loggedUName.IndexOf('\\') + 1);
        #endregion

        lblFollowedUpDateVal.Text = (query1.dateOfFollowUp != null) ? query1.dateOfFollowUp.ToString() : "No Date";
        #endregion

        #region Drop down box initilisations
        #region TMFddl
        string[] ddlTMFValues = new string[] { "", "Target", "Maintenance", "Fishing", "Unqualified", "NOT COMPLETE" };
        foreach (string val in ddlTMFValues)
        {
            ddlTMF.Items.Add(val);
        }

        ddlTMF.SelectedValue = query1.TMF.ToString();
        #endregion

        #region Quoted By ddl
        #region ddlQuotedByQuery
        var ddlQuotedByQuery = (from r in db.tblEmployees
                                where !r.txtSalesPerson.ToUpper().Contains("(")
                                select new
                                {
                                    r.ID,
                                    r.txtSalesPerson
                                }).Distinct().ToList();
        #endregion

        #region DDL Value Assignment
        ddlQuotedBy.DataSource = ddlQuotedByQuery;
        ddlQuotedBy.DataTextField = "txtSalesPerson";
        ddlQuotedBy.DataValueField = "ID";
        ddlQuotedBy.DataBind();
        ddlQuotedBy.SelectedValue = query1.QuotedBy.ToString();
        #endregion
        #endregion
        //ddlCustomer
        //ddlLocation
        #endregion
    }
    else
    {
        NameValueCollection nvc = Request.Form;
        hnIDPostedVal = nvc[aspControlNotation + "hnID"];
        nID = Convert.ToInt32(hnIDPostedVal);

        var query1 = (from r in db.tblQuoteLogs
                         where (r.nID == nID)
                         join emp in db.tblEmployees on r.QuotedBy equals emp.ID into r1
                         join cus in db.tblCustomers on r.luLocation equals cus.ID into r2
                         join qfr in db.tblQuoteFailReasons on r.ReasonForLost equals qfr.ID into r3
                         from x in r1.DefaultIfEmpty()
                         from y in r2.DefaultIfEmpty()
                         from z in r3.DefaultIfEmpty()
                         orderby r.LogDate descending
                         select new
                         {
                             #region Selected Fields
                             nID = r.nID,
                             Quote_Reference = r.Quote_Reference,
                             Validity = r.Validity,
                             TMF = r.TMF,
                             QuotedBy = r.QuotedBy,
                             EnteredBy = r.EnteredBy,
                             LogDate = r.LogDate,
                             luCustomer = r.luCustomer,
                             luLocation = r.luLocation,
                             txtContact = r.txtContact,
                             txtTelephone = r.txtTelephone,
                             POO = r.POO,
                             POL = r.POL,
                             POD = r.POD,
                             FPOD = r.FPOD,
                             txtEquipmentType = r.txtEquipmentType,
                             txtCommodity = r.txtCommodity,
                             NamedAcct = r.NamedAcct,
                             Cross_Trade = r.Cross_Trade,
                             Haz = r.Haz,
                             Break_Bulk = r.Break_Bulk,
                             Reefer = r.Reefer,
                             txtTargetTEU = r.txtTargetTEU,
                             Frequency = r.Frequency,
                             FollowUpDueDate = r.FollowUpDueDate,
                             UKSalesComments = r.UKSalesComments,
                             Secured = r.Secured,
                             Lost = r.Lost,
                             txtLostQuoteReasons = z.txtLostQuoteReasons,
                             dateOfFollowUp = r.dateOfFollowUp,
                             txtSalesPerson = x.txtSalesPerson, //Gets ID from the QuotedBy column to get the particular sales person name
                             txtLocation = y.txtLocation //Gets ID from the luLocation column to get the particular location
                             #endregion
                         }).First();
        //pageInitialisation(query1); //THIS IS WHERE I WAS GOING TO PASS THE QUERY FOR PAGE ELEMENT INITIALISATION BUT ANONYMOUS TYPE ERROR STOPS ME

        #region Initialise Page Elements (With Checks for null fields)
        txtQuoteRef.Text = (!String.IsNullOrEmpty(query1.Quote_Reference)) ? query1.Quote_Reference : "No Data";
        txtValidity.Text = (query1.Validity != null) ? query1.Validity.ToString() : "No Date";

        //txtTMF.Text = (!String.IsNullOrEmpty(query1.TMF)) ? query1.TMF: "No Data";
        //txtQuotedBy.Text = (!String.IsNullOrEmpty(query1.txtSalesPerson)) ? query1.txtSalesPerson : "No Data"; //BUGGY DUE TO NULL ENTRIES

        lblEnteredByVal.Text = (!String.IsNullOrEmpty(query1.EnteredBy)) ? query1.EnteredBy : "No Data";
        lblLogDateVal.Text = (query1.LogDate != null) ? query1.LogDate.ToString() : "No Date";

        txtCustomer.Text = (!String.IsNullOrEmpty(query1.luCustomer)) ? query1.luCustomer : "No Data";
        txtLocation.Text = (!String.IsNullOrEmpty(query1.txtLocation)) ? query1.txtLocation : "No Data"; //BUGGY DUE TO NULL ENTRIES

        txtContact.Text = (!String.IsNullOrEmpty(query1.txtContact)) ? query1.txtContact : "No Data";
        txtTelephone.Text = (!String.IsNullOrEmpty(query1.txtTelephone)) ? query1.txtTelephone : "No Data";
        txtPOO.Text = (!String.IsNullOrEmpty(query1.POO)) ? query1.POO : "No Data";
        txtPOL.Text = (!String.IsNullOrEmpty(query1.POL)) ? query1.POL : "No Data";
        txtPOD.Text = (!String.IsNullOrEmpty(query1.POD)) ? query1.POD : "No Data";
        txtFPOD.Text = (!String.IsNullOrEmpty(query1.FPOD)) ? query1.FPOD : "No Data";

        txtEquipmentType.Text = (!String.IsNullOrEmpty(query1.txtEquipmentType)) ? query1.txtEquipmentType : "No Data";
        txtCommodity.Text = (!String.IsNullOrEmpty(query1.txtCommodity)) ? query1.txtCommodity : "No Data";
        txtNamedAccount.Text = (!String.IsNullOrEmpty(query1.NamedAcct)) ? query1.NamedAcct : "No Data";

        chkCrossTrade.Checked = (query1.Cross_Trade != null) ? query1.Cross_Trade.Value : false;
        chkHaz.Checked = (query1.Haz != null) ? query1.Haz.Value : false;
        chkBreakBulk.Checked = (query1.Break_Bulk != null) ? query1.Break_Bulk.Value : false;
        chkReefer.Checked = (query1.Reefer != null) ? query1.Reefer.Value : false;

        txtTargetTEU.Text = (!String.IsNullOrEmpty(query1.txtTargetTEU)) ? query1.txtTargetTEU : "No Data";
        txtFrequency.Text = (!String.IsNullOrEmpty(query1.Frequency)) ? query1.Frequency : "No Data";

        txtFollowUpTarget.Text = (query1.FollowUpDueDate != null) ? query1.FollowUpDueDate.ToString() : "No Date";
        txtUKSalesComments.Text = (!String.IsNullOrEmpty(query1.UKSalesComments)) ? query1.UKSalesComments : "";
        chkSecured.Checked = (query1.Secured != null) ? query1.Secured.Value : false;
        chkLost.Checked = (query1.Lost != null) ? query1.Lost.Value : false;
        txtReasonForLost.Text = (!String.IsNullOrEmpty(query1.txtLostQuoteReasons)) ? query1.txtLostQuoteReasons : "";

        #region Get current users' login name and strip it down
        string loggedUName = WindowsIdentity.GetCurrent().Name.ToString();
        lblFollowedUpByVal.Text = loggedUName.Substring(loggedUName.IndexOf('\\') + 1);
        #endregion

        lblFollowedUpDateVal.Text = (query1.dateOfFollowUp != null) ? query1.dateOfFollowUp.ToString() : "No Date";
        #endregion

        #region Drop down box initilisations
        #region TMFddl
        string[] ddlTMFValues = new string[] { "", "Target", "Maintenance", "Fishing", "Unqualified", "NOT COMPLETE" };
        foreach (string val in ddlTMFValues)
        {
            ddlTMF.Items.Add(val);
        }

        ddlTMF.SelectedValue = query1.TMF.ToString();
        #endregion

        //ddlQuotedByQuery which populates drop down list
        var ddlQuotedByQuery = (from r in db.tblEmployees
                                where !r.txtSalesPerson.ToUpper().Contains("(")
                                select new
                                {
                                    r.ID,
                                    r.txtSalesPerson
                                }).Distinct().ToList();

        ddlQuotedBy.DataSource = ddlQuotedByQuery;
        ddlQuotedBy.DataTextField = "txtSalesPerson";
        ddlQuotedBy.DataValueField = "ID";
        ddlQuotedBy.DataBind();
        ddlQuotedBy.SelectedValue = query1.QuotedBy.ToString();
        #endregion
        #endregion
        //ddlCustomer
        //ddlLocation
        #endregion
    }
    #endregion
}

protected void btnNext_Click(object sender, EventArgs e)
{
    db = new DataClassesDataContext((string)Session["Conn"]);
    int nID = Convert.ToInt32(hnID.Value);

    //inverted to work correctly due to query ordering
    var queryNext = (from r in db.tblQuoteLogs
                     where r.nID < nID
                     orderby r.nID descending
                     select new
                     {
                         r.nID
                     });

    if (queryNext.Count() > 0)
    {
        hnID.Value = queryNext.Select(o => o.nID).First().ToString();
        Response.Redirect("~/QuoteInformation/Default.aspx");
    }
}

protected void btnPrevious_Click(object sender, EventArgs e)
{
    //db = new DataClassesDataContext((string)Session["Conn"]);
    //int nID = Convert.ToInt32(hnID.Value);

    ////inverted to work correctly due to query ordering
    //var queryPrevious = (from r in db.tblQuoteLogs
    //                     where r.nID > nID
    //                     orderby r.nID ascending
    //                     select new
    //                     {
    //                         r.nID
    //                     });

    //if (queryPrevious.Count() > 0)
    //{
    //    hnID.Value = queryPrevious.Select(o => o.nID).First().ToString();
    //    Response.Redirect("~/QuoteInformation/Default.aspx?nID=" + hnID.Value);
    //}
}

非常に途切れ途切れのコードで申し訳ありません:s、しかし、いくつかの助けをいただければ幸いです:)。

4

0 に答える 0