Matrix - Prüfung auf eine ausgwählte Zeile
Michael Hubenschmid
Hallo,ichj habe ein kleines Problem bei einer Programmierung.
Und zwar möchte ich prüfen, ob in einer Standard Matrix von SAP nur eine Zeile markiert ist und dann auch dessen Zeilennummern zurückbekommen, wenn dem so ist.
Wie es bei einem Grid funktioniert weiss ich nur scheint mir die Matrix diese Möglichkeit nicht zu geben.
Kennt jemand einen Workaround?
Danke für schnelle Tips.
Oder kann man irgendwie den Multiselect der Matrix deaktivieren, so dass nur eine Zeile markiert werden kann?
Gruss Michael
Bastian Hofmeister
Hi Michael,ich hab jetzt mal einen kurzen Blick in die API geworfen, konnte aber direkt auch keine entsprechende Methode finden.
Jedoch kann man sich schnell ein kleines Workaround schreiben:
Matrix matrix1 = Matrix.GetFromUID(pVal.Form, "38");
int rowCount = matrix1.Rows.Count;
int commonRow = 1;
for (int i = 0; i < rowCount; i++)
{
bool isRowSelected = matrix1.SelectedRows.IsRowSelected(commonRow);
if (isRowSelected == true)
MessageBox.Show(commonRow.ToString(), "OK");
commonRow++;
}
Ich hab mir die Rule mal auf den Function-Button im Auftrag gelegt.
Die MessageBox gibt mir immer die aktuell aktivierte Zeile aus.
Wie gesagt, ist nur ein Ansatz ;-)
HTH Basti
Michael Hubenschmid
Hallo Bastian,danke für den Tip, aber da hätte ich noch die Frage, ob
deine Syntax
int commonRow = 1;
immer die erste markierte Zeile meint oder die erste Zeile der Matrix.
Gruss Michael
Bastian Hofmeister
Ich hab die commonRow außerhalb der FOR-Schleife initialisiert, damit er in der FOR-Schleife sauber hochzählen kann und dabei immer in der ersten Zeile der Matrix beginnt.Matrix matrix1 = Matrix.GetFromUID(pVal.Form, "38");
Hier definiere ich ja welche Matrix(Item) gemeint ist,
bool isRowSelected = matrix1.SelectedRows.IsRowSelected(commonRow);
und hier welche Zeile der Matrix aktiviert/deaktiviert ist.
Er beginnt quasi in Zeile 1 und hört in der letzten auf.
HTH Basti
Michael Hubenschmid
Hallo,habe noch ein paar Anpassungen gemacht und nun funktioniert es wie ich es möchte.
Merci für deine Hilfe.
try
{
MessageBox.Show("Hier wird eine Umlagerung generiert und geöffnet.", "OK");
Matrix m = Matrix.GetFromUID(ev.Form, "5");
int rowCount = m.Rows.Count;
int selectedRows = 0;
int commonRow = 1;
string selectedRowIDs = "";
for (int i = 0; i < rowCount; i++)
{
bool isRowSelected = m.SelectedRows.IsRowSelected(commonRow);
if (isRowSelected == true)
{
//MessageBox.Show("Zeile: " + commonRow.ToString() + " selektiert!", "OK");
selectedRowIDs = selectedRowIDs.Insert(selectedRowIDs.Length, i.ToString() + ";");
selectedRows++;
}
commonRow++;
}
//MessageBox.Show("Anzahl selektierter Zeilen: " + selectedRows.ToString(), "OK");
if(selectedRows == 0)
{
MessageBox.Show("Bitte eine Alarmmeldung selektieren!", "OK");
return;
}
if(selectedRows > 1)
{
MessageBox.Show("Bitte nur eine Alarmmeldung selektieren!", "OK");
return;
}
if(selectedRows == 1)
{
MessageBox.Show("Selektierte Zeile: " + selectedRowIDs, "OK");
string messSubj = m.GetValue("1", int.Parse(selectedRowIDs.Replace(";", "")));
if(!messSubj.StartsWith("PRÜFUNG KONIGNATIONSBESTAND"))
{
MessageBox.Show("Bitte Alarmmeldung einer Konsignationsprüfung selektieren!", "OK");
}
else
{
MessageBox.Show("Umlagerung wird generiert und geöffnet!", "OK");
//......
}
}
}
catch(System.Exception ex)
{
MessageBox.Show("Error at generating stock transfer for consignation: " + ex.Message, "OK");
}
Gruss Michael
0
Please sign in to leave a comment.
Comments
0 comments