亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 DataGrid 導出到文本文件

將 DataGrid 導出到文本文件

C#
慕碼人8056858 2021-10-31 19:14:33
我是編程新手(在大學學習的第一年),我正在開發一個小型應用程序。我有一個窗口,用戶可以在其中從 SQL 檢索數據,DataGrid以及Button將一些數據從DataGrid數據導出到文本文件。這是我用來從 SQL 獲取數據的代碼:SqlConnection con = new SqlConnection("Server = localhost;Database = autoser; Integrated Security = true");SqlCommand cmd = new SqlCommand("selectproduct", con); // Using a Store Procedure.cmd.CommandType = CommandType.StoredProcedure;DataTable dt = new DataTable("dtList");cmd.Parameters.AddWithValue("@Code", txtbarcode.Text);SqlDataAdapter da = new SqlDataAdapter(cmd);da.Fill(dt);data.ItemsSource = dt.DefaultView;SqlDataAdapter adapt = new SqlDataAdapter(cmd);DataSet ds = new DataSet();adapt.Fill(ds);con.Close();int count = ds.Tables[0].Rows.Count;if (count == 0){    MessageBox.Show("This product doesn't excist");    SystemSounds.Hand.Play();}else if (count == 1){    lblinfo.Visibility = Visibility.Visible;    SystemSounds.Asterisk.Play();}這是我用來編寫文本文件的代碼:{    using (StreamWriter writer = new StreamWriter("D:\\test.txt", true))    {        writer.WriteLine("Welcome");        writer.WriteLine("E N T E R N E T");    }    using (StreamWriter writer = new StreamWriter("D:\\test.txt", true))    {        writer.WriteLine(data.Items);    }    using (StreamWriter writer = new StreamWriter("D:\\test.txt", true))    {        writer.WriteLine(data.Items);    }    // Append line to the file.    using (StreamWriter writer = new StreamWriter("D:\\test.txt", true))    {        writer.WriteLine("---------------------------------------");        writer.WriteLine("             Thank You!   ");        writer.WriteLine("        " + DateTime.Now + "              ");    }}當我打開文本文件時,我得到了這些數據WelcomeE N T E R N E TSystem.Windows.Controls.ItemCollection -   Why isn't show the data grid data---------------------------------------    Thank You       7/26/2018 12:38:37 PM   我的問題是:我的錯誤在哪里導致數據DataGrid無法以正確的方式顯示?
查看完整描述

3 回答

?
森林海

TA貢獻2011條經驗 獲得超2個贊

您當前正在使用該WriteLine方法的以下重載:


public virtual void WriteLine(object value)


如果您查看StreamWriter.WriteLine(object)的文檔,它會說:


通過調用對象上的ToString方法寫入對象的文本表示,后跟行終止符到文本字符串或流。


這就是您在文件中得到以下漂亮行的原因:


System.Windows.Controls.ItemCollection


Object.ToString()方法的文檔顯示


Object.ToString 方法的默認實現返回對象類型的完全限定名稱。


您需要遍歷集合并將每個條目分別寫入文件。我還建議直接使用數據源,而不是從DataGrid.


foreach (DataRow row in dt.Rows)

{  

    object[] array = row.ItemArray;

    writer.WriteLine(string.Join(" | ", array));        

}


查看完整回答
反對 回復 2021-10-31
?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

這是因為data.Items是一個ItemCollection而不是一個字符串。


ToString當要求將其內容表示為字符串時,所有對象都返回其方法的輸出。通常你會使用override這種方法,但在這種情況下你不能。


因此,您需要告訴編譯器如何從該集合中檢索代表性信息。您可以使用以下任一查詢從數據網格中獲取所需信息:


var items = data.Items.AsQueryable().Cast<MyItemDataType>().Select(x => x.MyProperty);


var items = data.ItemsSource.Cast<MyItemDataType>().Select(x => x.MyProperty);


var items = data.Items.SourceCollection.AsQueryable().Cast<MyItemDataType>().Select(x => x.MyProperty);

items 是一個集合,因此您需要將其轉換為字符串:


var text = items.Aggregate((x,y)=> x+", "+y);

MyItemDataType每個查詢都不同,您必須自己找出正在使用的數據類型,以及MyProperty該類中表示行文本的屬性。


編輯

您也可以使用此代碼。它做同樣的事情:


string text = "";

for (int i = 0; i < data.Items.Count; i++)

{

    text += data.Items[i].ToString();


    if(i < data.Items.Count - 1)

        text += ", ";

}

writer.WriteLine(text);

但要注意data.Items[i].ToString(). 例如,如果每個項目都是類型,int則data.Items[i].ToString()返回一個表示該整數值的字符串(例如 1 變成“1”),但如果它們是其他類型(例如Customeror MyDataGridItem),則需要覆蓋ToString()該類的方法以查看像這樣:


public class Customer{

    //...


    public override string ToString(){

        return this.Id + " " + this.Name;

    }

}

因此,如果您因任何原因無法覆蓋此方法,則需要采用另一種方法:


string text = "";

for (int i = 0; i < data.Items.Count; i++)

{

    Customer customer = data.Items[i] as Customer;//cast is required since type of Items[i] is object

    text += (customer.Id + " " + customer.Name);


    if(i < data.Items.Count - 1)

        text += ", ";

}

writer.WriteLine(text);

此外,您可以使用 aStringBuilder來加速字符串連接,因為+=在字符串上速度很慢。


查看完整回答
反對 回復 2021-10-31
  • 3 回答
  • 0 關注
  • 319 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號