Отображение данных из DataSet

Я хочу отображать данные из DataSet в мой ReportViewer. В настоящее время у меня есть 4 отчета, которые содержат основные данные, такие как NameSurname, NetworkLogin, Status, OrgUnitID, и я создал фильтр, который будет фильтровать эти данные, используя Status и OrgUnitID.

Пока вот код

public void BindToData()
{
    try
    {
        DataSet ds = new DataSet();
        string connString = @"Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=DesignSaoOsig1;Integrated Security=True";
        SqlConnection conn = new SqlConnection(connString);
        string strproc = "TestReport";
        using (SqlDataAdapter sda = new SqlDataAdapter(strproc, connString))
        {
            SqlCommand cmd = new SqlCommand();
            sda.SelectCommand.CommandType = CommandType.StoredProcedure;

            sda.SelectCommand.Parameters.Add("@Status", SqlDbType.Bit).Value = ddlStatus.SelectedValue == "1" ? true : false;
            sda.SelectCommand.Parameters.Add("@OrgJed", SqlDbType.Int).Value = ddlOrgUnit.SelectedValue;
            sda.Fill(ds);

            XtraReport report = new XtraReport();

            string nazivIzvjestaja = ds.Tables[0].Rows[0].ItemArray[0].ToString();

            if (string.IsNullOrEmpty(nazivIzvjestaja))
            {
                conn.Close();
            }

            report.DataSource = ds;
            report.DataMember = ds.Tables[0].ToString();

            string[] arrvalues = new string[ds.Tables[0].Rows.Count];

            for (int loopcounter = 0; loopcounter < ds.Tables[0].Rows.Count; loopcounter++)
            {
                //assign dataset values to array
                arrvalues[loopcounter] = ds.Tables[0].Rows[loopcounter]["PrezimeIme"].ToString();
                arrvalues[loopcounter] = ds.Tables[0].Rows[loopcounter]["NetworkLogin"].ToString();
                arrvalues[loopcounter] = ds.Tables[0].Rows[loopcounter]["Status"].ToString();
                arrvalues[loopcounter] = ds.Tables[0].Rows[loopcounter]["OrgUnitID"].ToString();
                arrvalues[loopcounter] = ds.Tables[0].Rows[loopcounter]["DT_Creat"].ToString();
                arrvalues[loopcounter] = ds.Tables[0].Rows[loopcounter]["DT_Modif"].ToString();                       
            }
        }
    }
    catch (Exception)
    {
        throw;
    }
}

Пока пользуюсь DevExpress. Пока я ловлю все данные, используя for loop, но у меня проблема, и я не знаю, как отобразить эти данные в Report.

Любая помощь будет более чем приветствуется.


person Community    schedule 02.06.2020    source источник
comment
Вы получаете меньше данных в цикле for, чем думаете. Каждый столбец перезаписывает последнее значение, установленное в arrvalues[loopcounter], поэтому вы сохраняете только значение DT_Modif для каждой строки.   -  person AlwaysLearning    schedule 02.06.2020
comment
Хммм, не уверен, что ты имеешь в виду?   -  person    schedule 02.06.2020
comment
Поскольку вы даже ни для чего не используете arrvalues, по крайней мере одна из ваших проблем заключается в том, что вы назначаете отчет DataMember ds.Tables[0].ToString();   -  person Crowcoder    schedule 02.06.2020
comment
Вы даже не используете значения arrvalue, поэтому просто удалите его и весь код, который на него ссылается. Ознакомьтесь с документацией DevExpress, чтобы узнать, как настроить источник данных XtraReport< /а>.   -  person AlwaysLearning    schedule 02.06.2020
comment
@Crowcoder да, так как я храню отчет в DataSet report.DataSource = ds;   -  person    schedule 02.06.2020
comment
Я считаю, что DataMember - это имя DataTable в DataSet, а не DataTable ToString(). Посмотрите на значение во время выполнения, это будет имя типа, а не имя таблицы.   -  person Crowcoder    schedule 02.06.2020
comment
@Crowcoder Извините, где эта строка кода?   -  person    schedule 02.06.2020


Ответы (1)


Как вы уже сказали, вы связали набор данных с отчетом, вы можете просмотреть отчет для проверки результата, вставив следующую строку после завершения цикла:

        report.ShowPreview();

Я заметил, что вы используете нетипизированный набор данных для DevExpress, его необходимо сериализовать, как это подробно объясняется в официальном сообщении Dev Express: Проверьте блог на официальном сайте

person Zahid Techoholic    schedule 02.06.2020
comment
Попробуйте следующее: DataMember = ds.Tables[0].TableName; - person Zahid Techoholic; 02.06.2020
comment
Нет, все еще есть проблема. Не читает отчет. Я получаю только «Документ не содержит страниц» - person ; 02.06.2020