2014-11-11 2 views
0

Итак, я получаю доступ к БД через хранимую процедуру и могу извлечь данные, которые я хотел в всплывающее окно. Проблема в том, что независимо от того, какую строку я нажимаю, ТОЛЬКО данные заполняют мои поля. Как я могу выбрать определенную строку, и данные этой конкретной строки вытащили из БД? Спасибо за любую помощьНевозможно выбрать определенную строку на Janus GridEX

Form1

public partial class DSC_Mon : Form 
{ 
    DSCU_SvcConsumer.MTCaller Caller; 
    DataSet dsZA; 
    DataSet dsOut; 

    public DSC_Mon() 
    { 
     InitializeComponent(); 
     Caller = new DSCU_SvcConsumer.MTCaller(); 
     dsZA = new DataSet(); 
     dsOut = new DataSet(); 
    } 

    private void DSC_Mon_Load(object sender, EventArgs e) 
    { 
     timer1.Enabled = true; 
    } 

    private void LoadData() 
    { 
     if (!dsZA.Tables.Contains("Query")) 
     { 
      DataTable dtZA = dsZA.Tables.Add("Query"); 
      dtZA.Columns.Add("str"); 
      dtZA.Rows.Add(string.Format(@"exec MON_GetStatus")); 
     } 
     //dtZA.Rows.Add(string.Format(@"select * from am_company")); 

     dsOut.Clear(); 
     dsOut.Merge(Caller.CallRequest("ZuluAction", dsZA)); 
     if (gridEXMon.DataSource == null) 
     { 
      gridEXMon.DataSource = dsOut; 
      gridEXMon.DataMember = "Table"; 
     } 
     //gridEXMon.RetrieveStructure(); 
    } 

    private void timer1_Tick(object sender, EventArgs e) 
    { 
     timer1.Enabled = false; 
     LoadData(); 
     timer1.Enabled = true; 
    } 

    private void gridEXMon_DoubleClick(object sender, EventArgs e) 
    { 
     ReportInfo report = new ReportInfo(); 
     report.ShowDialog(); 
    } 
} 

я заменил частный недействительным gridEXMon_DoubleClick с:

private void gridEXMon_RowDoubleClick(object sender, Janus.Windows.GridEX.RowActionEventArgs e) 
    { 
     if (e.Row.RowIndex < 0) 
      return; 

     int rowIndex = Convert.ToInt32(e.Row.RowIndex); 

     ReportInfo report = new ReportInfo(rowIndex); 
     report.ShowDialog(); 
    } 

Popup Dialog

public partial class ReportInfo : Form 
{ 
    public ReportInfo() 
    { 
     InitializeComponent(); 

     DSCU_SvcConsumer.MTCaller caller = new DSCU_SvcConsumer.MTCaller(); 

     DataSet dsZA = new DataSet(); 
     DataSet dsOut = new DataSet(); 
     if (!dsZA.Tables.Contains("Query")) 
     { 
      DataTable dtZA = dsZA.Tables.Add("Query"); 
      dtZA.Columns.Add("str"); 
      dtZA.Rows.Add(string.Format(@"MON_ReportInfo")); 
     } 

     dsOut.Clear(); 
     dsOut.Merge(caller.CallRequest("ZuluAction", dsZA)); 

     DataTable dt = dsOut.Tables["Table"]; 
     DataRow dr = dt.Rows[0]; 
     if (dt != null) 
     { 
      systemNameTextBox.Text = dr["System"].ToString(); 
      contactName1TextBox.Text = dr["Manager"].ToString(); 
      functionNameTextBox.Text = dr["Function"].ToString(); 
      durationMSTextBox.Text = dr["Speed"].ToString(); 
     } 
    } 

Я тогда послал RowIndex в всплывающее окно:

 DataTable dt = dsOut.Tables["Table"]; 
     DataRow dr = dt.Rows[rowIndex]; 
     systemNameTextBox.Text = dr["System"].ToString(); 
     contactName1TextBox.Text = dr["Manager"].ToString(); 
     functionNameTextBox.Text = dr["Function"].ToString(); 
     durationMSTextBox.Text = dr["Speed"].ToString(); 
    } 
+0

Если сортировка включена Янус сетке, вы можете получить другой результат, если вы используете RowIndex, потому что пользователь может изменить порядок в сетке. –

ответ

0

Вы пробовали с:

gridEXMon.DataSource = dsOut.Tables[0]; 
// next line is not required if you've already defined proper grid structure 
gridEXMon.RetrieveStructure(); 

Janus также имеет свой собственный форум доступный here. Вы можете найти там много полезной информации. Для просмотра я буду использовать IE. Janus форум работает хорошо только с IE ...

Отредактировано:

Как ReportInfo класс может знать, что запись уже вы выбрали? Тем более, что у вас есть код благородных предшественников:

DataTable dt = dsOut.Tables["Table"]; 
DataRow dr = dt.Rows[0]; // always first record is taken! 

Вероятно, вы должны определить CTOR с индексом строки:

public ReportInfo(int rowIndex) 
{ 
    ... 
    DataTable dt = dsOut.Tables["Table"]; 
    DataRow dr = dt.Rows[rowIndex]; 
    .... 
} 
+0

Благодарим за помощь – Gmac

+0

Если у вас включена сортировка на Janus Grid, вы можете получить другой результат, если используете RowIndex, потому что пользователь может изменить порядок в сетке. –

+0

Yeap, я согласен. Но это был первый снимок, поэтому в представлении ReportInfo всегда есть одни и те же данные. – rraszewski

0

Лучше, чтобы получить данные из сетки, чтобы сохранить дополнительный вызов к базе данных в классе ReportInfo ,

Вот код:

private void gridEXMon_DoubleClick(object sender, EventArgs e) 
    { 
     if (e.Row.RowIndex < 0) 
      return; 

     ReportInfo report = new ReportInfo(); 

     String System = Convert.ToInt32(e.Row.Cells["System"].Value); 
     String Manager = Convert.ToString(e.Row.Cells["Manager"].Value); 
     String Function = Convert.ToDecimal(e.Row.Cells["Function"].Value); 
     String Speed = Convert.ToInt32(e.Row.Cells["Speed"].Value); 

     report.ShowDialog(System, Manager, Function, Speed); 
    } 

Тогда ваш ReportInfo класс т е р должно быть:

public partial class ReportInfo : Form 
{ 
    public ReportInfo(String System, String Manager, String Function, String Speed) 
    { 
     InitializeComponent(); 

     systemNameTextBox.Text = System; 
     contactName1TextBox.Text = Manager; 
     functionNameTextBox.Text = Function; 
     durationMSTextBox.Text = Speed; 
    } 
} 
+0

Благодарим за помощь – Gmac

Смежные вопросы