【问题标题】:Data Refresh not happening till program re launch在程序重新启动之前不会发生数据刷新
【发布时间】:2018-09-24 12:32:51
【问题描述】:

我有一个类,我正在实现属性更改事件,但由于某种原因,我的列表视图不会更新数据,直到我关闭应用程序并重新启动它。

public BindingList<SalesOrders> GetSalesOrders()
{
    BindingList<SalesOrders> _salesOrdersList = new BindingList<SalesOrders>();

    try
    {


        string sageDsn = ConfigurationManager.AppSettings["SageDSN"];
        string sageUsername = ConfigurationManager.AppSettings["SageUsername"];
        string sagePassword = ConfigurationManager.AppSettings["SagePassword"];

        //using (var connection = new OdbcConnection("DSN=SageLine50v24;Uid=Manager;Pwd=;"))
        using (var connection = new OdbcConnection(String.Format("DSN={0};Uid={1};Pwd={2};", sageDsn, sageUsername, sagePassword)))
        {

            connection.Open();

            //string sql = string.Format(getInvoiceSql, customerCode, DateTime.Today.AddMonths(-1).ToString("yyyy-MM-dd"));
            string fromD = dtpFrom.Value.ToString("yyyy-MM-dd");
            string toD = dtpTo.Value.ToString("yyyy-MM-dd");

            String SQL = string.Format("SELECT 'ORDER_NUMBER', 'ORDER_OR_QUOTE', 'ANALYSIS_1','ACCOUNT_REF','ORDER_DATE','NAME', 'COURIER_NUMBER','COURIER_NAME','CUST_TEL_NUMBER' ,'DESPATCH_DATE','ACCOUNT_REF',  'DEL_NAME', 'DEL_ADDRESS_1', 'DEL_ADDRESS_2', 'DEL_ADDRESS_3', 'DEL_ADDRESS_4', 'DEL_ADDRESS_5',  'INVOICE_NUMBER','INVOICE_NUMBER_NUMERIC', 'CONTACT_NAME','CONSIGNMENT', 'NOTES_1', 'ITEMS_NET' ,'ITEMS_GROSS','QUOTE_STATUS' FROM SALES_ORDER WHERE ORDER_DATE >='{0}' and ORDER_DATE <='{1}'", fromD, toD);
            using (var command = new OdbcCommand(SQL, connection))
            {
                backgroundWorker1.ReportProgress(15);

                using (var reader = command.ExecuteReader())



                {

                    while (reader.Read())
                    {
                        backgroundWorker1.ReportProgress(35);

                        counter++;

                        var salesOrders = new SalesOrders();
                        if ((reader["ORDER_NUMBER"] != ""))
                        {
                            string orderNumber = Convert.ToString(reader["ORDER_NUMBER"]);
                            salesOrders.ACCOUNT_REF = Convert.ToString(reader["ACCOUNT_REF"]);
                            salesOrders.RecordIdentifier = "SHN";
                            salesOrders.ShipmmentId = Convert.ToString(reader["ORDER_NUMBER"]);
                            salesOrders.OrderDate = Convert.ToDateTime(reader["ORDER_DATE"]);
                            salesOrders.OrderNumber = Convert.ToString(reader["ORDER_NUMBER"]);

                            salesOrders.Company = "hackett";
                            salesOrders.Carrier = Convert.ToString(reader["COURIER_NUMBER"]);
                            salesOrders.CarrierService = Convert.ToString(reader["COURIER_NAME"]);
                            salesOrders.CustomerName = Convert.ToString(reader["NAME"]);
                            salesOrders.ShipToAddress1 = Convert.ToString(reader["DEL_ADDRESS_1"]);
                            salesOrders.ShipToAddress2 = Convert.ToString(reader["DEL_ADDRESS_2"]);
                            salesOrders.ShipToAddress3 = Convert.ToString(reader["DEL_ADDRESS_3"]);
                            salesOrders.ShipToAddress4 = Convert.ToString(reader["DEL_ADDRESS_4"]);
                            salesOrders.ShipToAddress5 = Convert.ToString(reader["DEL_ADDRESS_5"]);
                            salesOrders.ShiptoAttention = Convert.ToString(reader["DEL_NAME"]);
                            salesOrders.ShiptoPhoneNo = Convert.ToString(reader["CUST_TEL_NUMBER"]);
                            salesOrders.Country = Convert.ToString(reader["ANALYSIS_1"]);
                            salesOrders.ShiptoEmail = "";
                            salesOrders.MakeAddressDefault = "Y";
                            salesOrders.ExporteDateTime = GetExportedDate(orderNumber);
                            bool isProcessed = hasbeenProcessed(orderNumber);
                            if (isProcessed == true)
                                salesOrders.Exported = true;
                            _salesOrdersList.Add(salesOrders);

                        }
                        backgroundWorker1.ReportProgress(80);
                    }
                }
            }

        }
        backgroundWorker1.ReportProgress(100);

    }
    catch (Exception ex)
    {

    }

    return _salesOrdersList;
}

            }
            backgroundWorker1.ReportProgress(100);

        }
        catch (Exception ex)
        {

        }

        return _salesOrdersList;
    }

在我的后台工作人员中,我在这里创建列表

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
        var listOrders = new List<SalesOrders>();
        listOrders = GetSalesOrders().OrderByDescending(o => o.OrderDate).ToList();
        var listBindingOrders = new BindingList<SalesOrders>(listOrders);
        SalesOrders = listBindingOrders;


}

这是我绑定上面的构造函数。

public BindingList<SalesOrders> SalesOrders = new BindingList<BusinessObjects.SalesOrders>();

这是我的班级,我正在使用正在更改的导出标志上的通知更改属性,但它仅在我关闭应用程序时更新。

public class SalesOrders : INotifyPropertyChanged 
{

    public bool selected { get; set; }
    public string ORDER_OR_QUOTE { get; set; }

    public string OrderNumber { get; set; }

    public string ACCOUNT_REF { get; set; }



    public string RecordIdentifier { get; set; }

    public DateTime OrderDate { get; set; }
    public string  ShipmmentId { get; set; }

    public string Company { get; set; }

    public string Carrier { get; set; }

    public string CarrierService { get; set; }
    public string Customer { get; set; }
    public string CustomerName { get; set; }
    public string ShiptoName { get; set; }
    public string ShipToAddress1 { get; set; }

    public string ShipToAddress2 { get; set; }

    public string ShipToAddress3 { get; set; }

    public string ShipToAddress4 { get; set; }

    public string ShipToAddress5 { get; set;


    }

    public string ShiptoAttention { get; set; }

    public string ShiptoPhoneNo { get; set; }

    public string ShiptoEmail { get; set; }

    public string County { get; set; }

    public string MakeAddressDefault { get; set; }
    public string Address
    {
        get
        {
            var sb = new StringBuilder();
            sb.Append(ShipToAddress1);
            sb.Append(ShipToAddress2);
            sb.Append(ShipToAddress3);

            return sb.ToString();
        }
    }

private bool ExportedValue = false;

public bool Exported
{
    get { return this.ExportedValue; }

    set
    {
        if (value != this.ExportedValue)
        {
            this.ExportedValue = value;
            NotifyPropertyChanged();
        }
    }
}
public event PropertyChangedEventHandler PropertyChanged;

// This method is called by the Set accessor of each property.
// The CallerMemberName attribute that is applied to the optional propertyName
// parameter causes the property name of the caller to be substituted as an argument.
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}

    // The cons

    public DateTime ExporteDateTime { get; set; }
    public String Country  { get; set; }

}

我认为在这里显示我的绑定事件很重要。

// <summary>
/// Bind the list view to the sales order collection
/// </summary>
/// <param name="_salesOrders"></param>
private void BindListView(BindingList<SalesOrders> _salesOrders)
{

        invoiceListView.Items.Clear();
        foreach (SalesOrders _pur in _salesOrders)
        {

            invoiceListView.Items.Add(CreateListViewItem(_pur));

        }

        foreach (ListViewItem lvw in invoiceListView.Items)
        {
            Boolean hasExported = Convert.ToBoolean(lvw.SubItems[8].Text);
            if (hasExported == true)
            {
                lvw.BackColor = Color.Wheat;
            }
        }
}

我希望有人可以帮助我,这让我在其他一切正常但数据刷新时发疯。

【问题讨论】:

    标签: c# winforms listview


    【解决方案1】:

    您是否使用 listView1.ItemsSource = bindingList 确定您有一个与您的 ListView 关联的 BindingList,然后坚持修改实际的 BindingList 而不是 ListView? (例如,不使用 listView1.Items.Add,而是简单地添加到 listViews 绑定集合中)

    【讨论】:

    • 那么如何控制显示哪些列?
    • winforms中没有itemsoruce方法
    • 我假设是 WPF 而不是 WinForms,抱歉。嗯,INotifyProperty 仅适用于对象本身,而不适用于它们所在的集合。BindListView 是从哪里调用的?
    • 问题被标记为 winforms 而不是 wpf
    • 我明白了,我错过了标签,我很抱歉,但如果你想让我调查一下,我需要知道从哪里调用 BindListView ?
    【解决方案2】:

    您是否尝试过每次都使用 .refresh() 方法

    【讨论】:

    • refresh 只重绘 gui 请不要创建和回答问题,只有在你有足够的积分时才能评论。
    猜你喜欢
    • 1970-01-01
    • 2014-01-12
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    • 2020-03-19
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多