Je dois relier un Si la liste est NULL, je crée une liste vide afin que les en-têtes soient affichés, mais cela ne crée pas une ligne vide pour que je puisse être capable de pouvoir Ajouter des éléments. Pourquoi? Comment puis-je activer l'utilisateur d'ajouter des valeurs à cette liste? P> Quelqu'un code p> datagridview code> à partir d'une liste activer l'ajout code>.
3 Réponses :
Tout d'abord, Cette propriété dit P> Si la DataGridView est liée aux données,
L'utilisateur est autorisé à ajouter des rangées si
cette propriété et les données
ibindinglist de la source.allownew
la propriété est définie sur true. p>
blockQuote> si ilist.effixedsize ou
Ilist.isreadonly est vrai, cela
La propriété retourne false. p>
blockquote> puisque vous liez un DataGridView UservationAnservationadroadrows code> doit être true code> (et c'est puisque vous le réglez dans le concepteur).
ibindinglist.allownew code> (qui n'est pas réglable) mentionne également: P>
ienumerable code>, je pense que isreadonly code> est false code>. Essayez d'exposer la liste sous la liste Liste BindingList public List<Value> ValueList
{
get;
set;
}
private void Form1_Load(object sender, EventArgs ev)
{
if (ValueList == null)
{
ValueList = new List<Value>();
}
dataGrid.DataSource = new BindingList<Value>(ValueList);
}
Ajout à la réponse de Jon: BindingList addingrow code>, que vous pouvez écouter, pour spécifier l'élément à ajouter: AddHandler _bindingList.AddingNew, Sub(s, args)
args.NewObject = New TicketItem("dawg")
End Sub
Cette propriété sera false si vous avez DataGridView.allowAserAdrows = TRUE; Mais ne disposez pas de constructeur par défaut pour votre classe de liaison. Ajouter par défaut et fonctionner
public class atsTableInclude
{
// keep this to allow user to add row
public atsTableInclude() { }
public atsTableInclude(string p, bool u)
{
Prefix = p;
Use = u;
}
public string Prefix { get; set; }
public bool Use { get; set; }
}
public Sorting.SortableBindingList<T> FillAtsList<T>(string jsonfile) where T : class
{
if (!File.Exists(jsonfile))
{
MessageBox.Show(jsonfile, "File not found");
return null;
}
try
{
// load json from file
using (StreamReader r = new StreamReader(jsonfile))
{
string json = r.ReadToEnd();
var res = JsonConvert.DeserializeObject<List<T>>(json);
return new Sorting.SortableBindingList<T>(res);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Cannot load json", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
return null;
}
private void frmATS_Load(object sender, EventArgs e)
{
string jsonfile2 = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "atsTableInclude.json");
dataGridView2.DataSource = FillAtsList<atsTableInclude>(jsonfile2);
}
Ajouter un constructeur par défaut l'a fait pour moi. Merci!
Pourquoi n'êtes-vous pas contraignant sur un
BindingList code>? msdn.microsoft.com/en-us/library/ms132679.aspx@Jon je ne savais pas sur
BindingList Code>, je ne coporte généralement pas sur Winforms. Changer-le à unBindinglist Code> a fonctionné, merci.