2010-11-17 3 views
2
private void ShowIterationSelection() 
{ 
    IterationForm iterationForm = new IterationForm(lblProjectID.Text); 
    iterationForm.ShowDialog(); 
} 

Quand je montre la boîte de dialogue affiche une liste d'itérations associées au projet à l'aide du ProjectID:Comment puis-je afficher une boîte de dialogue et de capturer la réponse

public partial class IterationForm : Form 
{ 
    public IterationForm(string projectID) 
    { 
     InitializeComponent(); 
     LoadIterationsForProject(projectID); 
    } 

    private void LoadIterationsForProject(string projectID) 
    { 
     IterationRepository iterationRepo = new IterationRepository(); 
     Int64 ID = Convert.ToInt64(projectID); 
     dgvIterations.DataSource = iterationRepo.FindAllIterations().Where(i => i.IDProject == ID).Select(i => new { Codigo = i.ID, Descripcion = i.Description, Inicio = i.StartDate, Fin = i.EndDate }); 
    } 
} 

Ma question est, comment puis-je capturer la valeur sélectionnée de la vue de grille de données et passez-la mon formulaire appelant pour ouvrir un autre formulaire avec le IterationID de sélection?

Merci pour l'aide.

Alors peut-être quelque chose comme:

private void ShowIterationSelection() 
{ 
    IterationForm iterationForm = new IterationForm(lblProjectID.Text); 
    var result = iterationForm.ShowDialog(); 
    showTheThing(result); //this uses the iterationID 
} 

Répondre

1

Créez simplement une propriété publique sur le formulaire d'itération auquel vous pouvez accéder à partir de votre formulaire principal.

public partial class IterationForm : Form 
{ 
    // set this to the selected object (change to w/e type you need) 
    public object SelectedObject{get; private set;} 
    public IterationForm(string projectID) 
    { 
     InitializeComponent(); 
     LoadIterationsForProject(projectID); 
    } 

    private void LoadIterationsForProject(string projectID) 
    { 
     IterationRepository iterationRepo = new IterationRepository(); 
     Int64 ID = Convert.ToInt64(projectID); 
     dgvIterations.DataSource = iterationRepo.FindAllIterations().Where(i => i.IDProject == ID).Select(i => new { Codigo = i.ID, Descripcion = i.Description, Inicio = i.StartDate, Fin = i.EndDate }); 
    } 
} 

Ensuite, vous pouvez faire:

private void ShowIterationSelection() 
{ 
    IterationForm iterationForm = new IterationForm(lblProjectID.Text); 
    var result = iterationForm.ShowDialog(); 
    showTheThing(iterationForm.SelectedObject); //this uses the iterationID 
} 
3

le résultat de ShowDialog() est un ENUM du DialogResult type. Habituellement, vous testeriez si le formulaire affiché a un résultat DialogResult de "Ok". vous pouvez définir une propriété dans votre formulaire qui détient le résultat par exemple dans la propriété « ResultProperty » si vous voulez lire une fois le formulaire fermé utiliser quelque chose comme:

IterationForm iterationForm = new IterationForm(lblProjectID.Text); 
if (iterationForm.ShowDialog() == DialogResult.Ok) 
{ 
    // read result 
    var result = iterationForm.ResultProperty 
} 
else 
{ 
    // user has not clicked ok - do some other stuff here 
} 

sous la forme que vous avez montré que vous peut placer un eventhandler sur le bouton que l'utilisateur doit cliquer en cas d'acceptation et ajouter du code comme ceci:

private void Accept_Click(object sender, EventArgs e) 
{ 
    this.ResultProperty = someResult; 
    this.DialogResult = DialogResult.Ok; 
    this.Close(); 
} 

si l'utilisateur a cliqué sur le bouton annuler vous définissez la propriété comme:

private void Decline_Click(object sender, EventArgs e) 
{ 
    this.DialogResult = DialogResult.Cancel; 
    this.Close(); 
} 
0

Commencez en donnant votre IterationForm une propriété pour l'ID sélectionné:

public int SelectedID { get; set; } 

Lorsque votre utilisateur sélectionne une ligne de votre DataGrid, vous ll faut définir la propriété selectedID. Je vais vous laisser ce petit bout de chemin.

Maintenant, ajoutez un gestionnaire pour l'événement Closed de votre IterationForm:

private void ShowIterationSelection()  
{  
    IterationForm iterationForm = new IterationForm(lblProjectID.Text); 
    iterationForm.Closed += new EventHandler(iterationForm_Closed) 
    iterationForm.ShowDialog();  
} 

void iterationForm_Closed (object sender, EventArgs e) 
{ 
    IterationForm form = (IterationForm)sender; 
    showTheThing(form.SelectedID);  
} 
0

ShowDialog() ne retourne un DialogResult. Mais, ce que vous pouvez faire est interroger iterationID en tant que propriété publique sur IterationForm quand un DialogResult réussi est reçu. Quelque chose comme:

 var iterationForm = new IterationForm(lblProjectID.Text); 

     if (iterationForm.ShowDialog() == DialogResult.OK) 
     { 
      // do something with iterationForm.SelectedIterationId 
     } 
Questions connexes