1

伙计们,我有一个查询返回许多税码。(取决于选择的文件编号)

 //call method DoQuery and assign returned result to DataReader
DataReader = DoQuery("select oa.[OtherAmountCode] as 'Tax code'
             FROM [Biatss_PC_SRV].[Pax].[SalesDocumentOtherAmount] as oa 
             INNER JOIN [Biatss_PC_SRV].[Pax].[SalesRelatedDocumentInformation]
                 as rd on oa.RelatedDocumentGuid = rd.RelatedDocumentGuid 
             INNER JOIN  [Biatss_PC_SRV].[Pax].[SalesDocumentHeader] as h 
                 on rd.HdrGuid = h.HdrGuid 
             where h.DocumentNumber = '"+txtTicketNumber.Text.ToString()+"'");
//check DataReader
if (DataReader == null)
{
   DataReader.Close();
   DataReader.Dispose();
}
else
{
    if (DataReader.HasRows)
    {
        ReaderResult.Clear();
        while (DataReader.Read())
        { 
            for (int i = 0; i < DataReader.FieldCount; i++)
            {
                if (DataReader.IsDBNull(i))
                {
                    string CaseNull = "";
                    ReaderResult.Add(CaseNull);
                }
                else
                {
                    //put results in LIST<>
                    ReaderResult.Add(DataReader.GetString(i));                                       
                }
            }
        }                             

         //I HAVE TO ASSIGN THE VALUES RETURNED TO textBox1 - textBox5 HERE

    }
    else
    {
        DataReader.Close();
        DataReader.Dispose();
    }
    DataReader.Close();
    DataReader.Dispose();
}

我有 5 个文本框。我不知道如何将税码分配给文本框。

我尝试了 IF-ELSE(以数据读取器中的行数作为参考),但通过这种方法,我无法将输出委托给不同的文本框。

知道如何实现这一目标吗?

4

3 回答 3

1

将所有文本框放在一个数组中。确保它们与您的字段的顺序相同。

var textBoxes = new TextBox[] {textBox1, textBox2, textBox3, textBox4, textBox5};

for (int i = 0; i < DataReader.FieldCount; i++)
{
  if (DataReader.IsDBNull(i))
  {
    string CaseNull = "";
    ReaderResult.Add(CaseNull);
  }
  else
  {
    //put results in LIST<>
    ReaderResult.Add(DataReader.GetString(i));
  }

  // put data i onto textbox i
  textBoxes[i].Text = DataReader.GetString(i);
}
于 2013-09-30T09:21:31.900 回答
0
//I HAVE TO ASSIGN THE VALUES RETURNED TO textBox1 - textBox5 HERE
textBox1.Text = ReaderResult.ElementAtOrDefault(0);
textBox2.Text = ReaderResult.ElementAtOrDefault(1);
textBox3.Text = ReaderResult.ElementAtOrDefault(2);
textBox4.Text = ReaderResult.ElementAtOrDefault(3);
textBox5.Text = ReaderResult.ElementAtOrDefault(4);

但是,这取决于您的阅读器是否仅包含一条具有 5 个字段的记录,或者它是否包含具有 n 个字段的多条记录。在这种情况下,您需要澄清您的问题。

旁注:您应该始终使用 sql-parameters 来防止 sql-injection 或本地化问题,而不是

... where h.DocumentNumber = '"+txtTicketNumber.Text.ToString()+"'"

... where h.DocumentNumber = @TicketNumber"

并且您应该修改您的DoQuery方法以允许传递参数。

于 2013-09-30T09:22:30.007 回答
0

创建一个文本框列表,并在循环中分配结果:

var tbs = new List<TextBox>() { textBox1, textBox2, textBox3, textBox4, textBox5 };
for(int index = 0; index < ReaderResult.Count, index++)
{
    if(index < tbs.Count)
    {
        tbs[index].Text = ReaderResult[index];
    }
}

一个建议,您的代码可以使用IDisposableandusing模式来简化:

using (var DataReader = DoQuery(""))
{
    if (DataReader.HasRows)
    {
        ReaderResult.Clear();
        while (DataReader.Read())
        {
            for (int i = 0; i < DataReader.FieldCount; i++)
            {
                if (DataReader.IsDBNull(i))
                {
                    string CaseNull = "";
                    ReaderResult.Add(CaseNull);
                }
                else
                {
                    //put results in LIST<>
                    ReaderResult.Add(DataReader.GetString(i));

                }
            }
        }
    }
}
于 2013-09-30T09:26:02.727 回答