0

我正在尝试制作一个工作应用程序,在其中我将一些数据输入到一些控件(开始日期和结束日期工资周)中,然后用户从我们的工资程序中选择一个 csv 提取。然后,该应用程序将来自控件和 csv 文件的数据合并到一个数据表中,然后将其设置为 wpf 数据网格视图的 datacontxct。

this.dgCSVData.DataContext = oDS.Tables[0].DefaultView;

所以据我了解,数据网格现在已绑定(这是一个问题而不是陈述)这是一个屏幕截图加载数据截图

数据网格处于我想要将数据附加到的 sql 数据库中的数据表的“形状”中。然而,数据表是在私有事件处理程序 CSV_Load_Click 中创建的,代码块如下。

我希望做的是设置另一个按钮事件处理程序调用“上传数据”并将数据表(oDS.Tables[0].DefaultView)传递给 DAL 层以读取并附加到 sql 数据库表,问题是如何是否使数据表可用,我是否应该创建一个类来匹配我的数据行,然后创建行的公共列表?

private void CSV_Load_Click(object sender, RoutedEventArgs e)
{
    //Turn on upload button
    btUpload.IsEnabled = true;

    //To load and display CSV data
    //string filename = txFilePath.Text;
    string delimStr = ",,";
    char[] delimiter = delimStr.ToCharArray();
    string strFilePath = txFilePath.Text;
    DataSet oDS = new DataSet();
    string strFields = null;
    DataTable oTable = new DataTable();
    DataRow oRows = null;
    Int32 intCounter = 0;
    oDS.Tables.Add("Property");
    StreamReader oSR = new StreamReader(strFilePath);
    //Go to the top of the file
    oSR.BaseStream.Seek(0, SeekOrigin.Begin);
    string File = fileTest;
    //System.Windows.MessageBox.Show(File.ToString());

    //Add in the Header Columns check if headers in first row
    if (rbYes.IsChecked==true)
        // action for headers in row 1
    {
        foreach (string strFields_loopVariable in oSR.ReadLine().Split(delimiter))
        {
            strFields = strFields_loopVariable;
            oDS.Tables[0].Columns.Add(strFields);
        }
    }
    else
    {
        if (File==@"CHHOURS.CSV")
        {
            string TitleHeaders = "Wage_Year,Wage_Start_Date,Wage_End_Date,Tax Week,Wk_No,Clock,Surname,Initial,Dept,Dept_Hours,Other_Hours,Total_Hours,OT_Hours,";
            foreach (string strFields_loopVariable in TitleHeaders.Split(delimiter))
            {
                strFields = strFields_loopVariable;
                oDS.Tables[0].Columns.Add(strFields);
            }  
        }           
        else
        {
            Int32 i = 0;
            foreach (string strFields_loopVariable in oSR.ReadLine().Split(delimiter))
            {
                string ColumLetter = "abcdefghijklmnopqrstuvwxyz";

                strFields = ColumLetter[i].ToString();
                oDS.Tables[0].Columns.Add(strFields);
                i += 1;
            }
        }
    } 


    //String request = oSR.ReadToEnd();
    //Now add in the Rows
    oTable = oDS.Tables[0];
    while ((oSR.Peek() > -1))
    {
        oRows = oTable.NewRow();

        if (File == @"CHHOURS.CSV")
        {
            oRows[intCounter] = cbWageYear.Text;
            intCounter = intCounter + 1;
            oRows[intCounter] = dpStartDate.SelectedDate;
            intCounter = intCounter + 1;
            oRows[intCounter] = dpEndDate.SelectedDate;
            intCounter = intCounter + 1;
            oRows[intCounter] = cBTaxWeek.SelectedIndex;

            intCounter = intCounter + 1;
        }
        foreach (string strFields_loopVariable in oSR.ReadLine().Split(delimiter))
        {
            strFields = Convert.ToString(strFields_loopVariable);
            if (intCounter < 20)
            {
                oRows[intCounter] = strFields;
                intCounter = intCounter + 1;
            }
            else
            {

            }
        }

        intCounter = 0;
        oTable.Rows.Add(oRows);
    }

    this.dgCSVData.DataContext = oDS.Tables[0].DefaultView;
}
4

1 回答 1

0

好的,所以我今天早上醒来时想到了一个主意,它奏效了。哇!

我所做的只是在类的构造函数之前将我的数据集声明为公共的。现在可能有一种“更好”的方式,但这对我有用。我已经能够从我的 DAL 调用我的更新方法并创建一个数据读取器,所以现在只需更新到 sql,然后修复错误。

我几乎很高兴:)

这是代码

 public partial class MainWindow : Window
{



    public List<TaxWeek> LTaxWeeks { get; set; }

    public TaxWeek SelectedTaxWeek { get; set; }

    **public DataSet oDS = new DataSet();**


    public MainWindow()

    {
        InitializeComponent();
    }
于 2013-09-26T14:27:09.080 回答